需要的结果是
编号 A B C
0001 150 140 0
0002 0 35 26
0003 0 0 45
select 编号,
sum(case when 类别='a' then 金额 else 0 ) A,
sum(case when 类别='b' then 金额 else 0 ) B,
sum(case when 类别='c' then 金额 else 0 ) C
from 表 group by 编号
编号 A B C
0001 150 140 0
0002 0 35 26
0003 0 0 45
select 编号,
sum(case when 类别='a' then 金额 else 0 ) A,
sum(case when 类别='b' then 金额 else 0 ) B,
sum(case when 类别='c' then 金额 else 0 ) C
from 表 group by 编号
insert into t
select '0001',150,'A'
union all select '0001',140,'B'
union all select '0002',35,'B'
union all select '0002',26,'C'
union all select '0003',45,'C'
--select * from tselect 编号,sum((case 类别 when 'A' then 金额 else 0 end)) as A,
sum((case 类别 when 'B' then 金额 else 0 end)) as B,
sum((case 类别 when 'C' then 金额 else 0 end)) as C
from t group by 编号drop table t
set @sql = 'select 编号,'
select @sql = @sql + 'sum(case 类别 when '''+类别+'''
then 金额 else 0 end) as '''+类别+''','
from (select distinct 编号 from test) as a
select @sql = left(@sql,len(@sql)-1) + ' from test group by 编号'
exec(@sql)
go
如果类别多的就这样
付款方式表也先这样处理,再2个表内连就可以了付款方式表
类别不是固定的,或者后面可能增加呢?
--------------
使用動態SQL語句
Declare @S Nvarchar(4000)
Select @S = N' Select 编号'
Select @S = @S + N', SUM(Case 类别 When ''' + 类别 + N''' Then 金额 Else 0 End) As ' + 类别
From 表1 Group By 类别
Select @S = @S + N' From 表1 Group By 编号'
EXEC(@S)
按照你这个我的类别多个怎么传参数,还有付款方式连接到后面怎么写动态SQl呢
paoluo(一天到晚游泳的鱼
按照你这个我的类别多个怎么传参数,还有付款方式连接到后面怎么写动态SQl呢
-----------
"按照你这个我的类别多个怎么传参数", 你要傳入的參數是不是要指定的類別?
编号 类别1 类别1 类别1 类别1
0001 120 120 120 120
或者
编号 类别1 类别2 类别2 类别2 类别2
0001 120 240 240 240 240也就是说最后一个类别会出现4次???
我按照你给的动态sql查询的结果会出现这种:
编号 类别1 类别1 类别1 类别1
0001 120 120 120 120
或者
编号 类别1 类别2 类别2 类别2 类别2
0001 120 240 240 240 240也就是说最后一个类别会出现4次???
--------------
你確定你的實際需求和你的舉例是一致的嗎?根據你的示例得到的結果不會是你那樣子的。
Create Table 表1(编号 Varchar(4), 金额 Int, 类别 Varchar(1))
Insert 表1
Select '0001',150,'A'
Union All Select '0001',140,'B'
Union All Select '0002',35,'B'
Union All Select '0002',26,'C'
Union All Select '0003',45,'C'
GO
Declare @S NVarchar(4000)
Select @S = N' Select 编号'
Select @S = @S + N', SUM(Case 类别 When ''' + 类别 + N''' Then 金额 Else 0 End) As ' + 类别
From 表1 Group By 类别
Select @S = @S + N' From 表1 Group By 编号'
EXEC(@S)
GO
Drop Table 表1
--結果
/*
编号 A B C
0001 150 140 0
0002 0 35 26
0003 0 0 45
*/
至於“付款方式连接到后面怎么写动态SQl呢”,你最好重新舉例,寫出完整的需求。你的付款方式是不是固定只有3種,3種是隨便對應?還是“人民币 ”固定為第一種?
Select @S = N' Select BH'
Select @S = @S + N', SUM(Case LeiBie When ''' + leiBie + N''' Then JinE Else 0 End) As ' + LeiBie
From table Group By LeiBie
Select @S = @S + N' From table Group By BH'
EXEC(@S)这样就会报错