S050114001 2.30 4.50 A4纸
S050114001 2.30 4.50 NULL
小计 2.30 4.50 NULL
S050114002 1.90 3.50 16K
S050114002 1.90 3.50 NULL
小计 1.90 3.50 NULL
合计 4.20 8.00 NULL
你不要那行?
S050114001 2.30 4.50 NULL
小计 2.30 4.50 NULL
S050114002 1.90 3.50 16K
S050114002 1.90 3.50 NULL
小计 1.90 3.50 NULL
合计 4.20 8.00 NULL
你不要那行?
这两行都不要!
S050114001 2.30 4.50 NULL // ---- 这行不要
小计 2.30 4.50 NULL
S050114002 1.90 3.50 16K
S050114002 1.90 3.50 NULL // ---- 这行不要
小计 1.90 3.50 NULL
合计 4.20 8.00 NULL每张单据多了一行数据!
你把这个中的 id 去掉 "group by bill_no, id, sName" ,还有前面的Grouping(id) = 1 也都去掉,这不是多余吗,id 本来就是唯一的啊,你分什么组,要是有id,那么分组后的总记录数目应该就是你的记录数目的三倍加一了.
你自己试试看!我试了一下不行!结果:S050114001 2.30 4.50 A4纸
S050114001 2.30 4.50 NULL
S050114001 2.30 5.50 A4纸
S050114001 2.30 5.50 NULL
小计 4.60 10.00 NULL
S050114002 1.90 3.50 16K
S050114002 1.90 3.50 NULL
S050114002 1.90 6.50 16K
S050114002 1.90 6.50 NULL
小计 3.80 10.00 NULL
合计 8.40 20.00 NULL
再说了,你统计的是最大值,C表的ID是唯一的,你还分组,有意义吗?你是不是想按b表的ID分组呀?
S050114001 2.30 5.50 A4纸
小计 4.60 10.00 NULL
S050114002 1.90 3.50 16K
S050114002 1.90 6.50 16K
小计 3.80 10.00 NULL
合计 8.40 20.00 NULL这个是我想要的结果,你看该怎么写?
Select
case when grouping(bill_no) = 1 and Grouping(id) = 1 then '合计'
when grouping(id) = 1 then '小计'
else Max(bill_no) end Bill_No, case when grouping(bill_no) = 1 and Grouping(id) = 1 then Sum(Value1)
when grouping(id) = 1 then Sum(Value1)
else Max(Value1) end Value1, case when grouping(bill_no) = 1 and Grouping(id) = 1 then Sum(Value2)
when grouping(id) = 1 then Sum(Value2)
else Max(Value2) end Value2,
case when grouping(bill_no) = 1 and Grouping(id) = 1 then null
when grouping(id) = 1 then null
else Max(sName) end sName
from
(select *, (Select sName from a where sCode =
(Select sCode from b where Bill_no = Bill.Bill_No)
) as sName
from
c bill
) bill group by bill_no, id
with rollup我已经自己解决啦!
哈哈
上面是正确!