报表格式,去除重复的记录

从数据库里查出的结果如下
  名称 大小 价格 厂家
  电视机 12 1200 海尔
  电视机 10 1000 长虹
  电视机 15 1500 康佳
  冰箱 12 1200 海尔
  冰箱 10 1200 康佳
  冰柜 100 2000 康佳
最后显示的结果要这样的:
  电视机
  12 1200 海尔
  10 1000 长虹
  15 1500 康佳
  冰箱
  12 1200 海尔
  10 1200 康佳
  冰柜
  100 2000 康佳

代码
if object_id('tempdb.dbo.#') is not null drop table #
create table #(名称 varchar(8), 大小 int, 价格 int, 厂家 varchar(8))
insert into #
select '电视机', 12, 1200, '海尔' union all
select '电视机', 10, 1000, '长虹' union all
select '电视机', 15, 1500, '康佳' union all
select '冰箱', 12, 1200, '海尔' union all
select '冰箱', 10, 1200, '康佳' union all
select '冰柜', 100, 2000, '康佳'

;
with t1 as
(
select id=dense_rank()over(order by 名称),* from #
),
t2
as
(
select distinct id, 0a, 名称 大小, ''价格,''厂家 from t1
union all
select id, 1, ltrim(大小), ltrim(价格), ltrim(厂家) from t1
)
select 大小, 价格, 厂家 from t2 order by id,a
/*
大小 价格 厂家
------------ ------------ --------
冰柜
100 2000 康佳
冰箱
12 1200 海尔
10 1200 康佳
电视机
12 1200 海尔
10 1000 长虹
15 1500 康佳
*/

;
with cte as
(
select id=row_number()over(order by getdate()), * from #
)
select 名称 = case id when (select min(id) from cte where 名称=t.名称) then 名称 else '' end, 大小, 价格, 厂家 from cte as t

/*
名称 大小 价格 厂家
-------- ----------- ----------- --------
电视机 12 1200 海尔
10 1000 长虹
15 1500 康佳
冰箱 12 1200 海尔
10 1200 康佳
冰柜 100 2000 康佳
*/

原文地址:https://www.cnblogs.com/gaolonglong/p/1833984.html