--如果dhotelname是固定的
Select
det,
SUM(Case dhotelname When '度假村' Then dpeople Else 0 End)As 度假村人数,
SUM(Case dhotelname When '影都' Then dpeople Else 0 End)As 影都人数,
SUM(Case dhotelname When '休闲山庄' Then dpeople Else 0 End)As 休闲山庄人数
From

Group By
det--如果dhotelname不是固定的
Declare @S Varchar(8000)
Select @S = ' Select det'
Select @S = @S + ',SUM(Case dhotelname When ''' + dhotelname + ''' Then dpeople Else 0 End)As ' + dhotelname + '人数'
From 表 Group By dhotelname
Select @S = @S + ' From 表 Group By det'
EXEC(@S)

解决方案 »

  1.   

    如果内容固定可以这样
    select det,'度假村',(case dhotelname when '度假村' then dpeople end) as dpeople1,
    '影都',(case dhotelname when '影都' then dpeople end) as dpeople2,
    '休闲山庄',(case dhotelname when '休闲山庄' then dpeople end) as dpeople1
    from table1
    如果不固定 用动态SQL,搜索 行转列
      

  2.   

    if object_id('tbTest') is not null
    drop table tbTest
    GO
    create table tbTest(det varchar(10), dhotelname varchar(10),dpeople int)
    insert tbTest
    select '上海','度假村', 12 union all
    select '上海','影都', 12 union all
    select '上海','休闲山庄', 12declare @sql varchar(8000)
    set @sql = 'select det'
    select @sql = @sql + ',' + dhotelname + '=max(case dhotelname when ''' + dhotelname + ''' then dhotelname end),
    人数 = sum(case dhotelname when ''' + dhotelname + ''' then dpeople else 0 end)'
    from tbTest group by dhotelname
    EXEC(@sql + ' from tbTest group by det')
     
    drop table tbTest/*结果
    det    度假村        人数   休闲山庄   人数   影都    人数          
    --------------------------------------------------------------
    上海       度假村        12     休闲山庄    12    影都     12
    */
      

  3.   

    一张表里面要是有很多条记录,那么则SQL语句会超过8000个
      

  4.   

    你的dhotelname有這麼多?!那查詢出來的列得有多少個。如果超長,就定義多個變量來拼接