34,590
社区成员
发帖
与我相关
我的任务
分享
WITH a(OrderNo,OrderRow,StockBill#,FeeName,FeePrice,QTY,StockQTY) AS (
select 3564,1,4654,N'运费',253,87000,134990 union
select 3564,1,4654,N'加工费',6.8,87000,134990 union
select 3564,1,4654,N'装卸费',36,87000,134990 union
select 3564,2,4654,N'运费',253,15000,8280 union
select 3564,2,4654,N'加工费',6.8,15000,8280 union
select 3564,2,4654,N'装卸费',36,15000,8280 union
select 3579,1,4658,N'运费',272,40000,67780 union
select 3575,1,4659,N'运费',603,200000,199300 union
select 3575,1,4659,N'佣金',200,200000,199300 union
select 3575,1,4663,N'运费',603,200000,199300 union
select 3575,1,4663,N'运费',603,200000,199300 union
select 3575,1,4663,N'运费',603,200000,199300 union
select 3579,1,4664,N'运费',272,40000,67780 union
select 3575,1,4665,N'运费',603,200000,199300 union
select 3572,1,4666,N'运费',122,90000,96950 union
select 3566,1,4667,NULL,NULL,20000,20085 union
select 3581,1,4671,N'运费',54,200000,199740 union
select 3581,1,4672,N'佣金',154,200000,199740 union
select 3580,1,4673,N'运费',225.85,80000,79700 union
select 3587,1,4674,N'运费',243.93,60000,67360
)
SELECT OrderNo,OrderRow,QTY,StockQTY
,(CASE WHEN FeeName=N'佣金' then FeePrice ELSE 0 end ) as 佣金
,(CASE WHEN FeeName=N'运费' then FeePrice ELSE 0 end ) as 运费
,SUM(CASE WHEN FeeName NOT IN (N'运费',N'佣金') then FeePrice ELSE 0 end ) as 其它费
FROM a
GROUP BY OrderNo,OrderRow,QTY,StockQTY,Feename,FeePrice
这样出来的结果是:
OrderNo OrderRow QTY StockQTY 佣金 运费 其它费
3564 1 87000 134990 0 0 6.8
3564 1 87000 134990 0 253 0
3564 1 87000 134990 0 0 36
3564 2 15000 8280 0 0 6.8
3564 2 15000 8280 0 253 0
3564 2 15000 8280 0 0 36
3566 1 20000 20085 0 0 0
3572 1 90000 96950 0 122 0
3575 1 200000 199300 200 0 0
3575 1 200000 199300 0 603 0
3579 1 40000 67780 0 272 0
3580 1 80000 79700 0 225.85 0
3581 1 200000 199740 154 0 0
3581 1 200000 199740 0 54 0
3587 1 60000 67360 0 243.93 0
而我想要的结果是将相同OrderNo+OrderRow的结果合并
如:
OrderNo OrderRow QTY StockQTY 佣金 运费 其它费
3564 1 87000 134990 0 253 42.8
3564 2 15000 8280 0 253 42.8
3572 1 90000 96950 0 122 0
WITH a(OrderNo,OrderRow,StockBill#,FeeName,FeePrice,QTY,StockQTY) AS (
select 3564,1,4654,N'运费',253,87000,134990 union
select 3564,1,4654,N'加工费',6.8,87000,134990 union
select 3564,1,4654,N'装卸费',36,87000,134990 union
select 3564,2,4654,N'运费',253,15000,8280 union
select 3564,2,4654,N'加工费',6.8,15000,8280 union
select 3564,2,4654,N'装卸费',36,15000,8280 union
select 3579,1,4658,N'运费',272,40000,67780 union
select 3575,1,4659,N'运费',603,200000,199300 union
select 3575,1,4659,N'佣金',200,200000,199300 union
select 3575,1,4663,N'运费',603,200000,199300 union
select 3575,1,4663,N'运费',603,200000,199300 union
select 3575,1,4663,N'运费',603,200000,199300 union
select 3579,1,4664,N'运费',272,40000,67780 union
select 3575,1,4665,N'运费',603,200000,199300 union
select 3572,1,4666,N'运费',122,90000,96950 union
select 3566,1,4667,NULL,NULL,20000,20085 union
select 3581,1,4671,N'运费',54,200000,199740 union
select 3581,1,4672,N'佣金',154,200000,199740 union
select 3580,1,4673,N'运费',225.85,80000,79700 union
select 3587,1,4674,N'运费',243.93,60000,67360
)
SELECT OrderNo,OrderRow,QTY,StockQTY
,SUM(CASE WHEN FeeName=N'佣金' then FeePrice ELSE 0 end ) as 佣金
,SUM(CASE WHEN FeeName=N'运费' then FeePrice ELSE 0 end ) as 运费
,SUM(CASE WHEN FeeName NOT IN (N'运费',N'佣金') then FeePrice ELSE 0 end ) as 其它费
FROM a
GROUP BY OrderNo,OrderRow,QTY,StockQTY