我有图1实例样式的数据和表格。想得到图2的结果。不知道SQL语句该怎么写了,谢谢。
SQL Server
/* 测试数据
WITH table1(运单明细,运单编号,付款方式,运费)AS(
SELECT 'L11','Y05',1,30 UNION ALL
SELECT 'L12','Y05',2,40 UNION ALL
SELECT 'L13','Y05',2,30 UNION ALL
SELECT 'L14','Y06',1,50 UNION ALL
SELECT 'L15','Y06',1,60 UNION ALL
SELECT 'L16','Y06',2,40
) */
SELECT 运单编号,
[1] AS 付款方式1的运费合计,
[2] AS 付款方式2的运费合计,
[1]+[2] AS 全部运费合计
FROM (
SELECT 运单编号,付款方式,运费
FROM table1
) t
PIVOT (
SUM(运费)
FOR 付款方式 IN ([1],[2])
) p
结果
运单编号 付款方式1的运费合计 付款方式2的运费合计 全部运费合计
-------- ------------------- ------------------- ------------
Y05 30 70 100
Y06 110 40 150
select A as '运单明细',B as '运单编号', C as '付款方式', D as '运费' from T1;
Declare @sql varchar(8000)
Set @sql = 'Select B as 运单编号'
Select @sql = @sql + ',sum(case C when '''+C+''' then D else 0 end) [付款方式'+C+'的运费合计]'
from (select distinct C from T1) as T --把所有唯一的付款方式的名称都列举出来
Select @sql = @sql+',sum(D) as ''全部运费合计'''
Select @sql = @sql+' from T1 group by B'
Exec (@sql)
list 为图一表的名字,转化为如图样子,剩下的楼主自己解决吧
select 运单编号,sum(付款第一种方式) 付款第一种方式,sum(付款第二种方式)付款第二种方式,sum(运费1) 全部运费合计 from (
select 运单编号,decode(付款方式,1,运费1,null) 付款第一种方式,decode(付款方式,2,运费1,null) 付款第二种方式 ,运费1 from (
select 运单编号,付款方式,sum(运费) 运费1 from orderss group by 运单编号,付款方式) s
)
group by 运单编号
ORCL 数据库的 希望能帮你解决