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

我正试图导出表格数据为Excel格式。

我目前的视图的select查询给出这样的结果..

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 

那么如何实现呢?

这太长了评论。

不要在SQL中这样做。 事实上,我甚至不认为这是在Excel中的好主意。 通过删除这些值,您将失去对列值进行筛选或创build数据透视表等function。

可以在SQL中做到这一点。 一个简单的方法使用lag()

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

但是只是因为你能做到这一点并不意味着你应该这样做。

这里有一个用于SQL 2008的方法,使用ROW_NUMBER()和一些分区而不是LAG 。 请注意,如果您有权访问2012+,则LAG解决scheme应该更高效(可读)。

 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 

input:

 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 

但是,再次,这可能会导致更多的问题比解决。 我会考虑是否更有意义的转折/ unpivot或以其他方式重新排列数据,也许有效地显示每列Column_A / B / C / D的ID列表。