组织数据以删除某些列中的重复项

时间:2017-10-27 10:25:53

标签: sql sql-server sap

我目前正在尝试创建一个可以显示新行信息并删除重复的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         |
-----------------------------

1 个答案:

答案 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

<强>更新

brandcar之间有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