组织数据以删除某些列中的重复项
Organising data to remove duplicates in certain columns
我目前正在尝试制作一份 SQL 报告,该报告可以在新行上显示信息并删除重复项。
为了这个例子,我有一个列(汽车),它从 tableA 中获取一个字段,然后链接到 tableB(颜色)。类似于下面的 table。
-----------------------------
|Car (TableA)|Colour(TableB)|
-----------------------------
|CarA |Blue |
|CarA |Black |
|CarA |Yellow |
|CarB |Purple |
|CarB |Orange |
|CarB |Black |
-----------------------------
相反,我试图让我的数据显示如下内容:
-----------------------------
|Car (TableA)|Colour(TableB)|
-----------------------------
|CarA |Blue |
| |Black |
| |Yellow |
| | |
|CarB |Purple |
| |Orange |
| |Black |
-----------------------------
这应该是诀窍:
declare @tbl as table (
car varchar(10)
,brand varchar(10)
,colour varchar(10)
)
insert into @tbl values ('CarA', 'Tesla', 'Blue')
insert into @tbl values ('CarA', 'Tesla', 'Black')
insert into @tbl values ('CarA', 'Tesla', 'Yellow')
insert into @tbl values ('CarB', 'Kia', 'Purple')
insert into @tbl values ('CarB', 'Kia', 'Orange')
insert into @tbl values ('CarB', 'Kia', 'Black')
insert into @tbl values ('CarC', 'Ford', 'Green')
SELECT
CASE WHEN rn > 1 THEN '' ELSE car END AS car
,colour
FROM (
SELECT
car
,colour
,ROW_NUMBER() OVER (PARTITION BY car ORDER BY car, colour ASC) rn
FROM @tbl
) tbl
更新
说 brand
在 car
和 colour
之间:
SELECT
CASE WHEN rn > 1 THEN '' ELSE car END AS car
,CASE WHEN rn > 1 THEN '' ELSE brand END AS brand
,colour
FROM (
SELECT
car
,brand
,colour
,ROW_NUMBER() OVER (PARTITION BY car, brand ORDER BY car, colour ASC) rn
FROM @tbl
) tbl
我目前正在尝试制作一份 SQL 报告,该报告可以在新行上显示信息并删除重复项。
为了这个例子,我有一个列(汽车),它从 tableA 中获取一个字段,然后链接到 tableB(颜色)。类似于下面的 table。
-----------------------------
|Car (TableA)|Colour(TableB)|
-----------------------------
|CarA |Blue |
|CarA |Black |
|CarA |Yellow |
|CarB |Purple |
|CarB |Orange |
|CarB |Black |
-----------------------------
相反,我试图让我的数据显示如下内容:
-----------------------------
|Car (TableA)|Colour(TableB)|
-----------------------------
|CarA |Blue |
| |Black |
| |Yellow |
| | |
|CarB |Purple |
| |Orange |
| |Black |
-----------------------------
这应该是诀窍:
declare @tbl as table (
car varchar(10)
,brand varchar(10)
,colour varchar(10)
)
insert into @tbl values ('CarA', 'Tesla', 'Blue')
insert into @tbl values ('CarA', 'Tesla', 'Black')
insert into @tbl values ('CarA', 'Tesla', 'Yellow')
insert into @tbl values ('CarB', 'Kia', 'Purple')
insert into @tbl values ('CarB', 'Kia', 'Orange')
insert into @tbl values ('CarB', 'Kia', 'Black')
insert into @tbl values ('CarC', 'Ford', 'Green')
SELECT
CASE WHEN rn > 1 THEN '' ELSE car END AS car
,colour
FROM (
SELECT
car
,colour
,ROW_NUMBER() OVER (PARTITION BY car ORDER BY car, colour ASC) rn
FROM @tbl
) tbl
更新
说 brand
在 car
和 colour
之间:
SELECT
CASE WHEN rn > 1 THEN '' ELSE car END AS car
,CASE WHEN rn > 1 THEN '' ELSE brand END AS brand
,colour
FROM (
SELECT
car
,brand
,colour
,ROW_NUMBER() OVER (PARTITION BY car, brand ORDER BY car, colour ASC) rn
FROM @tbl
) tbl