SQL 分组条件聚合怎么实现?

我有图1实例样式的数据和表格。想得到图2的结果。不知道SQL语句该怎么写了,谢谢。
图片说明

4个回答

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)
taomanman
暖枫无敌 回复heqteyur: 不好意思,没有能成为最佳答案。
大约 5 年之前 回复
heqteyur
heqteyur 谢谢你这么快回答我的问题。
大约 5 年之前 回复

图片说明

create view view_group as select B,C,sum(D) from list group by B,C;

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 数据库的 希望能帮你解决

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐