编号 名称1 名称2
1001 水 水
1001 水 矿泉水
1002 烟 烟
1002 烟 白沙烟
1002 烟 云烟
1003 酒 酒
1003 酒 茅台 想要结果如下
编号 名称1 名称2
1001 水 水
矿泉水
1002 烟 烟
白沙烟
云烟
1003 酒 酒
茅台
1001 水 水
1001 水 矿泉水
1002 烟 烟
1002 烟 白沙烟
1002 烟 云烟
1003 酒 酒
1003 酒 茅台 想要结果如下
编号 名称1 名称2
1001 水 水
矿泉水
1002 烟 烟
白沙烟
云烟
1003 酒 酒
茅台
--> 生成测试数据: @T
DECLARE @T TABLE (编号 INT,名称1 VARCHAR(2),名称2 VARCHAR(6))
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,'酒','茅台'--SQL查询如下:SELECT CASE WHEN 名称1=名称2
THEN RTRIM(编号)
ELSE '' END 编号,
CASE WHEN 名称1=名称2
THEN 名称1
ELSE '' END 名称1,
名称2
FROM @T/*
编号 名称1 名称2
------------ ---- ------
1001 水 水
矿泉水
1002 烟 烟
白沙烟
云烟
1003 酒 酒
茅台(7 行受影响)
*/
DECLARE @T TABLE
(
编号 INT,
名称1 VARCHAR(2),
名称2 VARCHAR(6)
)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 CASE WHEN 名称1=名称2 THEN
RTRIM(编号)
ELSE
''
END 编号,
CASE WHEN 名称1=名称2 THEN
名称1
ELSE ''
END 名称1,
名称2
FROM @T
Insert into #a select '1001','水','水'
Insert into #a select '1001','水','矿泉水'
Insert into #a select '1002','烟','烟'
Insert into #a select '1002','烟','白沙烟'
Insert into #a select '1002','烟','云烟'
Insert into #a select '1003','酒','酒'
Insert into #a select '1003','酒','茅台'select * from #a
Select
s_no=case when c_name=(select top 1 c_name from #a where s_no=a.s_no) then s_no else '' end,
s_name=case when s_name=(select top 1 s_name from #a where s_name=a.c_name) then s_name else '' end,c_name
from #a a
Drop Table #a
Insert into #a select '1002','烟','烟'
Insert into #a select '1002','烟','白沙烟'
Insert into #a select '1002','烟','云烟'
Insert into #a select '1003','酒','酒'
Insert into #a select '1003','酒','茅台'
Insert into #a select '1001','水','水'select * INTO #b from #a order by s_no,(case when s_name=c_name then 1 else 2 end)
Select
s_no=case when c_name=(select top 1 c_name from #b where s_no=a.s_no) then s_no else '' end,
s_name=case when s_name=(select top 1 s_name from #b where s_name=a.c_name) then s_name else '' end,c_name
from #b a
Drop Table #a,#b
SELECT CASE WHEN 名称1=名称2 THEN
RTRIM(编号)
ELSE
''
END 编号,
CASE WHEN 名称1=名称2 THEN
名称1
ELSE ''
END 名称1,
名称2
FROM @T
order by 编号
想要结果如下
编号 名称1 名称2
1001 水 水
矿泉水
1002 烟 烟
白沙烟
云烟
1003 酒 酒
茅台
*/
create TABLE #EE (id char(10),Info1 VARCHAR(12),Info2 VARCHAR(16))
INSERT INTO #EE
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 t.id,t.info1,t.info2 from
(select *,id px from #EE where Info1=Info2
union all
select id='',info1,info2,id px from #EE where Info1<>Info2)
t order by px,len(info2)