34,576
社区成员
发帖
与我相关
我的任务
分享
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([id] int,[djbh] nvarchar(6))
Insert #A
select 313,N'dj_001' union all
select 314,N'dj_002' union all
select 315,N'dj_003'
Go
--> -->
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([id] int,[djbh] int,[bh] nvarchar(10),[dj] int,[sl] int,[je] int)
Insert #B
select 1,313,N'0000000001',5,1,5 union all
select 2,313,N'0000000002',5,1,5 union all
select 3,314,N'0000000001',4,1,4 union all
select 4,315,N'0000000001',3,1,3
Go
if not object_id(N'Tempdb..#C') is null
drop table #C
Go
Create table #C([bh] nvarchar(10),[qm] nvarchar(2))
Insert #C
select N'0000000001',N'花生' union all
select N'0000000002',N'牛奶'
Go
--现在要得到A表里的id,djbh,B表里的djbh,bh,dj,sl,C表里的bh,qm,并且B表里的sl,je要按bh(编号)汇总,比较难,分不够可以加
Select
CASE WHEN c.[qm] IS NULL OR a.[djbh] IS NULL THEN N'' ELSE c.qm end AS qm,
CASE WHEN c.[qm] IS NULL THEN N'合計' WHEN a.[djbh] IS NULL THEN N'小計' ELSE a.[djbh] END AS [djbh],
SUM(b.sl) AS sl,
SUM(b.[je]) AS [je]
from #A AS a
INNER JOIN #B AS b ON a.id=b.djbh
INNER JOIN #C AS c ON c.bh=b.bh
GROUP BY c.[qm],a.[djbh],b.ID WITH rollup
HAVING (GROUPING(b.ID)=0 OR GROUPING(c.qm)=1 OR GROUPING(a.[djbh])=1)
/*
qm djbh sl je
牛奶 dj_001 1 5
小計 1 5
花生 dj_001 1 5
花生 dj_002 1 4
花生 dj_003 1 3
小計 3 12
合計 4 17
*/
Select
CASE WHEN c.[qm] IS NULL OR a.bh IS NULL THEN N'' ELSE c.qm end AS qm,
CASE WHEN c.[qm] IS NULL THEN N'合計' WHEN a.bh IS NULL THEN N'小計' ELSE a.bh END AS [djbh],
min(rq) as rq,
SUM(b.sl2) AS sl,
SUM(b.[je2]) AS [je]
from A AS a
INNER JOIN B AS b ON a.id=b.djbh
INNER JOIN C AS c ON c.bh=b.bh
GROUP BY c.[qm],a.bh,a.ID WITH rollup
HAVING (GROUPING(a.ID)=0 OR GROUPING(c.qm)=1 OR GROUPING(a.bh)=1)