查询结果如下:
合并 内蒙1 160
合并 内蒙2 NULL
合并 张家1 100
--- 小计: 260
非合 北京1 130
非合 北京2 NULL
非合 北京3 NULL
--- 小计: 130想这样显示:
查询结果如下:
合并 内蒙1 160
内蒙2 NULL
张家1 100
--- 小计: 260
非合 北京1 130
北京2 NULL
北京3 NULL
--- 小计: 130就是这一个字段,如果上下两行是相同的只显示第一行就可以了
合并 内蒙1 160
合并 内蒙2 NULL
合并 张家1 100
--- 小计: 260
非合 北京1 130
非合 北京2 NULL
非合 北京3 NULL
--- 小计: 130想这样显示:
查询结果如下:
合并 内蒙1 160
内蒙2 NULL
张家1 100
--- 小计: 260
非合 北京1 130
北京2 NULL
北京3 NULL
--- 小计: 130就是这一个字段,如果上下两行是相同的只显示第一行就可以了
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (a varchar(4),b varchar(5),c int)
insert into #T
select '合并','内蒙1',160 union all
select '合并','内蒙2',null union all
select '合并','张家1',100 union all
select '非合','北京1',130 union all
select '非合','北京2',null union all
select '非合','北京3',nullselect case when grouping(b)=1 then '--小计--' else a end a,
case when isnull(b,'')='' then '' else b end b,
sum(c) c
from #T
group by a,b
with rollup
having grouping(a)=0/*
a b c
-------- ----- -----------
非合 北京1 130
非合 北京2 NULL
非合 北京3 NULL
--小计-- 130
合并 内蒙1 160
合并 内蒙2 NULL
合并 张家1 100
--小计-- 260
*/
查询结果如下:
合并 内蒙1 160
合并 内蒙2 NULL
合并 张家1 100
非合 北京1 130
非合 北京2 NULL
非合 北京3 NULL
想这样显示:
查询结果如下:
合并 内蒙1 160
内蒙2 NULL
张家1 100
非合 北京1 130
北京2 NULL
北京3 NULL 就是这一个字段,如果上下两行是相同的只显示第一行就可以了
insert into #T
select '合并','内蒙1',160 union all
select '合并','内蒙2',null union all
select '合并','张家1',100 unioN all
SELECT '---','小计:',260 union all
select '非合','北京1',130 union all
select '非合','北京2',null union all
select '非合','北京3',null unioN all
SELECT '---','小计:',130
UPDATE #T SET a=(CASE WHEN exists(SELECT 1 FROM #T WHERE a=a.a AND id+1=a.id) THEN '' ELSE a end) FROM #T aSELECT * FROM #T
DROP TABLE #t
--result
/*a b c id
---- ------ ----------- -----------
合并 内蒙1 160 1
内蒙2 NULL 2
张家1 100 3
--- 小计: 260 4
非合 北京1 130 5
北京2 NULL 6
北京3 NULL 7
--- 小计: 130 8 (所影响的行数为 8 行)*/
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (a varchar(4),b varchar(5),c int)
insert into #T
select '合并','内蒙1',160 union all
select '合并','内蒙2',null union all
select '合并','张家1',100 union all
select '非合','北京1',130 union all
select '非合','北京2',null union all
select '非合','北京3',nullselect case when grouping(b)=1 then '--小计--' else a end a,
case when isnull(b,'')='' then '' else b end b,
sum(c) c
into #
from #T
group by a,b
with rollup
having grouping(a)=0select case when b=(select min(b) from # where t.a=a) then a else '' end a,
b,c
from # tdrop table #/*
a b c
-------- ----- -----------
非合 北京1 130
北京2 NULL
北京3 NULL
--小计-- 130
合并 内蒙1 160
内蒙2 NULL
张家1 100
--小计-- 260(所影响的行数为 8 行)
*/