if not object_id('Tempdb..#') is null drop table # Go Create table #([编号] int,[名称1] nvarchar(1),[名称2] nvarchar(3)) Insert # select 1001,N'水',N'水' union all select 1001,N'水',N'矿泉水' union all select 1002,N'烟',N'烟' union all select 1002,N'烟',N'白沙烟' union all select 1002,N'烟',N'云烟' union all select 1003,N'酒',N'酒' union all select 1003,N'酒',N'茅台' Go Select [编号]=case when [名称2]=(select top 1 [名称2] from # where [编号]=a.[编号]) then rtrim([编号]) else '' end,[名称1],[名称2] from # a(7 個資料列受到影響) 编号 名称1 名称2 ------------ ---- ---- 1001 水 水 水 矿泉水 1002 烟 烟 烟 白沙烟 烟 云烟 1003 酒 酒 酒 茅台(7 個資料列受到影響)
select isnull(b.编号,''),a.名称1,a.名称2 from tb a left join (select * from tb where 名称1=名称2) b on a.编号=b.编号
Go Select [编号]=case when [名称2]=[名称1] then rtrim([编号]) else '' end,[名称1],[名称2] from # a
select * from ( select 编号=(case when c.名称2=(select min(名称2) from tb where 编号=c.编号 and 名称1=c.名称1) then a.编号 else '' end) , 名称1, 名称2 from tb c ) order by 名称1,名称2
create table tb(编号 varchar(10), 名称1 varchar(10) , 名称2 varchar(10)) insert into tb values(1001 , '水' , '水') insert into tb values(1001 , '水' , '矿泉水') insert into tb values(1002 , '烟' , '烟') insert into tb values(1002 , '烟' , '白沙烟') insert into tb values(1002 , '烟' , '云烟') insert into tb values(1003 , '酒' , '酒') insert into tb values(1003 , '酒' , '茅台') goselect 编号, 名称1 , 名称2 from ( select * , 编号 px from tb where 名称1 = 名称2 union all select 编号 = '' , 名称1 , 名称2 , 编号 px from tb where 名称1 <> 名称2 ) t order by px , len(名称2)drop table tb/* 编号 名称1 名称2 ---------- ---------- ---------- 1001 水 水 水 矿泉水 1002 烟 烟 烟 云烟 烟 白沙烟 1003 酒 酒 酒 茅台(所影响的行数为 7 行) */
create table tb(编号 varchar(10), 名称1 varchar(10) , 名称2 varchar(10)) insert into tb values(1001 , '水' , '水') insert into tb values(1001 , '水' , '矿泉水') insert into tb values(1002 , '烟' , '烟') insert into tb values(1002 , '烟' , '白沙烟') insert into tb values(1002 , '烟' , '云烟') insert into tb values(1003 , '酒' , '酒') insert into tb values(1003 , '酒' , '茅台') go--1 select 编号, 名称1 , 名称2 from ( select * , 编号 px from tb where 名称1 = 名称2 union all select 编号 = '' , 名称1 , 名称2 , 编号 px from tb where 名称1 <> 名称2 ) t order by px , len(名称2)--2 select case when 名称2=(select top 1 名称2 from tb where 编号 = a.编号) then 编号 else '' end as 编号,名称1,名称2 from tb adrop table tb/* 编号 名称1 名称2 ---------- ---------- ---------- 1001 水 水 水 矿泉水 1002 烟 烟 烟 云烟 烟 白沙烟 1003 酒 酒 酒 茅台(所影响的行数为 7 行) */
declare @T table (编号 varchar(10) ,名称 varchar(8),名称2 varchar(8)) insert into @T select 1001,'水','水' union all select 1001,'水','矿泉水' union all select 1002,'烟','烟' union all select 1002,'烟','白沙烟' union all select 1002,'烟','云烟' union all select 1003,'酒','酒' union all select 1003,'酒','茅台' --select * from @t select * from (select * from @T WHERE 名称=名称2 union all select '',名称,名称2 from @t where 名称!=名称2)a order by 名称 desc 1002 烟 烟 烟 白沙烟 烟 云烟 1001 水 水 水 矿泉水 1003 酒 酒 酒 茅台
go
--> -->
if not object_id('Tempdb..#') is null
drop table #
Go
Create table #([编号] int,[名称1] nvarchar(1),[名称2] nvarchar(3))
Insert #
select 1001,N'水',N'水' union all
select 1001,N'水',N'矿泉水' union all
select 1002,N'烟',N'烟' union all
select 1002,N'烟',N'白沙烟' union all
select 1002,N'烟',N'云烟' union all
select 1003,N'酒',N'酒' union all
select 1003,N'酒',N'茅台'
Go
Select
[编号]=case when [名称2]=(select top 1 [名称2] from # where [编号]=a.[编号]) then rtrim([编号]) else '' end,[名称1],[名称2]
from # a(7 個資料列受到影響)
编号 名称1 名称2
------------ ---- ----
1001 水 水
水 矿泉水
1002 烟 烟
烟 白沙烟
烟 云烟
1003 酒 酒
酒 茅台(7 個資料列受到影響)
select isnull(b.编号,''),a.名称1,a.名称2 from tb a left join (select * from tb where 名称1=名称2) b on a.编号=b.编号
Select
[编号]=case when [名称2]=[名称1] then rtrim([编号]) else '' end,[名称1],[名称2]
from # a
select 编号=(case when c.名称2=(select min(名称2) from tb where 编号=c.编号 and 名称1=c.名称1) then a.编号 else '' end) ,
名称1,
名称2
from tb c ) order by 名称1,名称2
insert into tb values(1001 , '水' , '水')
insert into tb values(1001 , '水' , '矿泉水')
insert into tb values(1002 , '烟' , '烟')
insert into tb values(1002 , '烟' , '白沙烟')
insert into tb values(1002 , '烟' , '云烟')
insert into tb values(1003 , '酒' , '酒')
insert into tb values(1003 , '酒' , '茅台')
goselect 编号, 名称1 , 名称2 from
(
select * , 编号 px from tb where 名称1 = 名称2
union all
select 编号 = '' , 名称1 , 名称2 , 编号 px from tb where 名称1 <> 名称2
) t
order by px , len(名称2)drop table tb/*
编号 名称1 名称2
---------- ---------- ----------
1001 水 水
水 矿泉水
1002 烟 烟
烟 云烟
烟 白沙烟
1003 酒 酒
酒 茅台(所影响的行数为 7 行)
*/
insert into tb values(1001 , '水' , '水')
insert into tb values(1001 , '水' , '矿泉水')
insert into tb values(1002 , '烟' , '烟')
insert into tb values(1002 , '烟' , '白沙烟')
insert into tb values(1002 , '烟' , '云烟')
insert into tb values(1003 , '酒' , '酒')
insert into tb values(1003 , '酒' , '茅台')
go--1
select 编号, 名称1 , 名称2 from
(
select * , 编号 px from tb where 名称1 = 名称2
union all
select 编号 = '' , 名称1 , 名称2 , 编号 px from tb where 名称1 <> 名称2
) t
order by px , len(名称2)--2
select case when 名称2=(select top 1 名称2 from tb where 编号 = a.编号) then 编号 else '' end as 编号,名称1,名称2 from tb adrop table tb/*
编号 名称1 名称2
---------- ---------- ----------
1001 水 水
水 矿泉水
1002 烟 烟
烟 云烟
烟 白沙烟
1003 酒 酒
酒 茅台(所影响的行数为 7 行)
*/
declare @T table (编号 varchar(10) ,名称 varchar(8),名称2 varchar(8))
insert into @T select 1001,'水','水'
union all select 1001,'水','矿泉水'
union all select 1002,'烟','烟'
union all select 1002,'烟','白沙烟'
union all select 1002,'烟','云烟'
union all select 1003,'酒','酒'
union all select 1003,'酒','茅台'
--select * from @t
select * from
(select * from @T WHERE 名称=名称2
union all
select '',名称,名称2 from @t where 名称!=名称2)a
order by 名称 desc
1002 烟 烟
烟 白沙烟
烟 云烟
1001 水 水
水 矿泉水
1003 酒 酒
酒 茅台