日期:2014-05-19  浏览次数:20631 次

如何实现一列中重复的记录替换为空
如果记录重复出现就替换为空,如果没有就显示
比如
序号       货物     数量
  1             A           30
  2                           10
  3                           -5
  4             B             20
  5                           100
  6             C             1
  7                           98

------解决方案--------------------
declare @t table(序号 int,货物 varchar(100),数量 int)
insert into @t
select 1, 'A ' , 30 union
select 2 , 'a ' , 10 union
select 3 , 'a ' , -5 union
select 4 , 'B ' , 20 union
select 5 , 'b ' , 100 union
select 6 , 'C ' , 1 union
select 7 , 'c ' , 98


select 序号,case when 序号=(select min(序号) from @t where 货物=a.货物) then 货物 else ' ' end as 货物, 数量
from @t a
order by 序号
------解决方案--------------------
CREATE TABLE table1
(
序号 int null,
货物 varchar(10),
数量 INT
)
INSERT INTO table1
SELECT 1, 'A ',30 UNION ALL
SELECT 2, 'A ',10 UNION ALL
SELECT 3, 'A ',-5 UNION ALL
SELECT 4, 'B ',20 UNION ALL
SELECT 5, 'B ',100 UNION ALL
SELECT 6, 'C ',1 UNION ALL
SELECT 7, 'C ',98

SELECT 序号,货物,数量, ' ' 货物1 INTO #t FROM table1

SELECT IDENTITY(INT,1,1) IDEN ,MIN(序号) 序号,货物 INTO #T2 FROM table1 GROUP BY 货物
DECLARE @i INT,@j INT ,@K INT--当前行及总行数序号
DECLARE @HW VARCHAR(50)
SELECT @j=COUNT(1) FROM #T2

SET @i=1
WHILE @i <=@j
BEGIN
SELECT @K=序号,@HW=货物 FROM #T2 WHERE IDEN=@i
UPDATE #T SET 货物1=@HW WHERE 序号=@K
SET @i=@i+1
END
SELECT 序号,货物1 货物, 数量 FROM #T

DROP TABLE #T
DROP TABLE #T2
DROP TABLE table1
--结果
序号 货物 数量
----------- ---- -----------
1 A 30
2 10
3 -5
4 B 20
5 100
6 C 1
7 98
------解决方案--------------------
create table T(序号 int, 货物 varchar(10), 数量 int)
insert T select 1, 'A ', 30
union all select 2, 'A ', 10
union all select 3, 'A ', -5
union all select 4, 'B ', 20
union all select 5, 'B ', 100
union all select 6, 'C ', 1
union all select 7, 'C ', 98

select T.序号, 货物=isnull(B.货物, ' '), T.数量 from T
left join
(
select * from T as tmp
where not exists(select 1 from T where 货物=tmp.货物 and 序号=tmp.序号-1)
)B on T.序号=B.序号

--result
序号 货物 数量
----------- ---------- -----------
1 A 30
2 10
3 -5
4 B 20
5 100
6 C 1
7 98