我目前正在尝试创建一个可以显示新行信息并删除重复的SQL报告。
为了这个例子,我有一个列(car)从tableA获取一个字段,然后链接到tableB(颜色)。类似下表。
-----------------------------
|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 |
-----------------------------
答案 0 :(得分:0)
这应该是诀窍:
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