有如下数据
工程编码 , 工程名称, 工程卷册, 卷册负责人
60-F4401S, *******, 60-F4401S-J0101, 张三
60-F4401S, *******, 60-F4401S-J0102, 李四
60-F4401S, *******, 60-F4401S-J0103, 王五
60-F2154S, *******, 60-F2154S-D0101, 刘七
60-F2154S, *******, 60-F2154S-K0104, 支八
60-F3124S, *******, 60-F3124S-D0421, 范九
60-F3124S, *******, 60-F3124S-H1245, 赵十
60-F3124S, *******, 60-F3124S-S1243, 娄大
60-F1101S, *******, 60-F1101S-J1236, WANG想得到这样的结果
工程编码 , 工程名称, 工程卷册, 卷册负责人
60-F4401S, *******, 60-F4401S-J0101, 张三
60-F4401S, *******, 60-F4401S-J0102, 李四
60-F4401S, *******, 60-F4401S-J0103, 王五
小计, 3
60-F2154S, *******, 60-F2154S-D0101, 刘七
60-F2154S, *******, 60-F2154S-K0104, 支八
小计 2
60-F3124S, *******, 60-F3124S-D0421, 范九
60-F3124S, *******, 60-F3124S-H1245, 赵十
60-F3124S, *******, 60-F3124S-S1243, 娄大
小计 3
60-F1101S, *******, 60-F1101S-J1236, WANG
小计 1
工程编码 , 工程名称, 工程卷册, 卷册负责人
60-F4401S, *******, 60-F4401S-J0101, 张三
60-F4401S, *******, 60-F4401S-J0102, 李四
60-F4401S, *******, 60-F4401S-J0103, 王五
60-F2154S, *******, 60-F2154S-D0101, 刘七
60-F2154S, *******, 60-F2154S-K0104, 支八
60-F3124S, *******, 60-F3124S-D0421, 范九
60-F3124S, *******, 60-F3124S-H1245, 赵十
60-F3124S, *******, 60-F3124S-S1243, 娄大
60-F1101S, *******, 60-F1101S-J1236, WANG想得到这样的结果
工程编码 , 工程名称, 工程卷册, 卷册负责人
60-F4401S, *******, 60-F4401S-J0101, 张三
60-F4401S, *******, 60-F4401S-J0102, 李四
60-F4401S, *******, 60-F4401S-J0103, 王五
小计, 3
60-F2154S, *******, 60-F2154S-D0101, 刘七
60-F2154S, *******, 60-F2154S-K0104, 支八
小计 2
60-F3124S, *******, 60-F3124S-D0421, 范九
60-F3124S, *******, 60-F3124S-H1245, 赵十
60-F3124S, *******, 60-F3124S-S1243, 娄大
小计 3
60-F1101S, *******, 60-F1101S-J1236, WANG
小计 1
case when a.工程名称 is null then '小计' else a.工程编码 end as 工程编码,
isnull(a.工程名称,rtrim(NUM)),
a.工程卷册,
a.卷册负责人
from
(select
工程编码,工程名称,工程卷册,卷册负责人,COUNT(*) as NUM
from
TName
group by
工程编码,工程名称,工程卷册,卷册负责人
having
grouping(卷册负责人)=0 or (grouping(工程编码)=0 and grouping(工程名称)=1)) a
工程卷册 varchar(30), 卷册负责人 varchar(30))
Insert into @t
Select '60-F4401S','*******','60-F4401S-J0101','张三'
union select '60-F4401S','*******','60-F4401S-J0102','李四'
union select '60-F4401S','*******','60-F4401S-J0103','王五'
union select '60-F2154S','*******','60-F2154S-D0101','刘七'
union select '60-F2154S','*******','60-F2154S-K0104','支八'
union select '60-F3124S','*******','60-F3124S-D0421','范九'
union select '60-F3124S','*******','60-F3124S-H1245','赵十'
union select '60-F3124S','*******','60-F3124S-S1243','娄大'
union select '60-F1101S','*******','60-F1101S-J1236','WANG'
Select (Case when a.工程名称 is null then '小计' else a.工程编码 end) as 工程编码,
isnull(a.工程名称,Rtrim(NUM)) as 工程名称, isNULL(a.工程卷册,'') as 工程卷册,
isnull(a.卷册负责人,'') as 卷册负责人
from
( Select 工程编码,工程名称,工程卷册,卷册负责人,COUNT(*) as NUM
from @t
group by 工程编码,工程名称,工程卷册,卷册负责人
With rollup
having (grouping(卷册负责人)=0) or
(grouping(工程编码)=0 and grouping(工程名称)=1)
) a
还有
having (grouping(卷册负责人)=0) or
(grouping(工程编码)=0 and grouping(工程名称)=1)
没有看明白,能解释下吗>?先谢谢