如何在sql中隐藏行中的重复值

时间:2017-01-23 13:03:27

标签: c# sql sql-server excel sql-server-2008

我正在尝试将表数据导出为ex​​cel格式。

我目前的观点的选择查询会给出这样的结果..

IDs  Column_A  Column_B  Column_C  Column_D   Column_E  
1    EDC        RFV       TGB       UJM        14789     
2    EDC        RFV       TGB       UJM        22225

但我希望得到这样的结果......

IDs  Column_A  Column_B  Column_C  Column_D   Column_E  
1    EDC        RFV       TGB       UJM        14789     
2                                              22225

那么如何实现这个目标呢?

2 个答案:

答案 0 :(得分:4)

评论太长了。

不要在SQL中执行此操作。事实上,我甚至认为这在Excel中不是一个好主意。通过删除值,您将无法执行过滤列值或创建数据透视表等操作。

可以在SQL中执行此操作。一种简单的方法使用lag()

select . . .,
       (case when lag(column_a) over (order by id) = column_a then NULL
             else column_a
        end) as column_a,
       . . .

但仅仅因为你能做到并不意味着你应该这样做。

答案 1 :(得分:1)

这是一个用于SQL 2008的方法,使用ROW_NUMBER()和一些分区而不是LAG。请注意,如果您有权使用2012 +。{/ p>,LAG解决方案应该更有效(并且可读)

DECLARE @tbl TABLE (IDs int,Column_A char(3), Column_B char(3), Column_C char(3),Column_D char(3),Column_E int)

insert @tbl
VALUES 
(1,'EDC','RFV','TGB','UJM',14789)
,(2,'EDC','RFV','TGB','UJM',22225)
,(3,'EDC','RFV','TGB','UJM',22222)
,(4,'ECD','RFV','TGB','UJM',22222)


select IDs
        ,(case when ROW_NUMBER() over (PARTITION BY Column_A order by ids) <> 1 then NULL
             else column_a
            end) as column_a
            ,(case when ROW_NUMBER() over (PARTITION BY Column_B order by ids) <> 1 then NULL
             else column_B
            end) as column_b
            ,(case when ROW_NUMBER() over (PARTITION BY Column_C order by ids) <> 1 then NULL
             else column_c
            end) as column_c
            ,(case when ROW_NUMBER() over (PARTITION BY Column_D order by ids) <> 1 then NULL
             else column_D
            end) as column_D
        ,Column_E
FROM @tbl

输入:

1   EDC     RFV     TGB     UJM     14789
2   EDC     RFV     TGB     UJM     22225
3   EDC     RFV     TGB     UJM     22222
4   ECD     RFV     TGB     UJM     22222

输出:

1   EDC     RFV     TGB     UJM     14789
2   NULL    NULL    NULL    NULL    22225
3   NULL    NULL    NULL    NULL    22222
4   ECD     NULL    NULL    NULL    22222

但同样,这可能会导致更多问题而不是解决。我会考虑转动/忽略或重新排列数据是否更有意义,也许是为了有效地显示每个Column_A / B / C / D的ID列表。