日期:2014-05-18  浏览次数:20486 次

这种条件用sqlserver语句怎么写,要用子查询么
AA BB CC DD --字段名
1 1 a A  
1 1 a B  
1 1 b A -------------------------这边是用sql语句写、
1 1 b C  
2 2 a C
2 2 a B
变成
AA BB A B C
1 1 a a -
1 1 b - b  
2 2 - a a

上次问问题别人的回答,我没说清楚,下面的语句就是CC,DD字段的数据是已知的,可是我要的是CC,DD字段用sql语句查询出来后再变成我要的那种显示方式。
select AA,
A=max(case when CC='A' then BB else '-' end),  
B=max(case when CC='B' then BB else '-' end),  
C=max(case when CC='C' then BB else '-' end)  
from @t group by AA,BB order by 1



------解决方案--------------------
SQL code

create table tb(AA int,BB varchar(1),CC varchar(1))
insert into tb
select 1,'a','A' union all
select 1,'a','B' union all
select 1,'b','A' union all
select 1,'b','C' union all
select 2,'a','C' union all
select 2,'a','B'

declare @sql varchar(8000)
set @sql='select AA, '
select @sql=
@sql+'max(case when CC='''+ltrim(CC)
+''' then BB else ''-'' end) as '+ltrim(CC)+','
from (select distinct CC from tb) a
set @sql=left(@sql,len(@sql)-1)+' from tb group by AA,BB order by 1'
exec(@sql)
/*
AA          A    B    C
----------- ---- ---- ----
1           a    a    -
1           b    -    b
2           -    a    a
*/