如何在SQL中的一个字段的查询中隐藏重复项?

时间:2013-02-09 09:34:55

标签: sql-server sql-server-2008-r2

我在这个主题上很新,需要帮助...... 如何在SQL中的一个字段的查询中隐藏重复项?例如,我有一个表

  • 1,122,123,6
  • 2,122,156,7
  • 3,122,188,6
  • 4,101,186,8

我想得到表

  • 122,123,6
  • 空,156,7
  • 空,188,6
  • 101,186,8
“Emty”意味着这个单元格应该是emty。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

这是一种可能的方式:

DECLARE @t TABLE (col1 INT, col2 INT, col3 INT, col4 INT)
INSERT @t VALUES 
(1, 122, 123, 69),
(2, 122, 156, 7),
(3, 122, 188, 6),
(4, 101, 186, 8)

SELECT  CASE WHEN ROW_NUMBER() OVER (PARTITION BY col2 ORDER BY col1) = 1 THEN col2 END col2_New
        , col3
        , col4
FROM    @t
ORDER BY
        col1

只有第一次出现col2才会在结果集中写入值(值按col1升序排序),否则值为NULL(在数据库术语中表示没有定义值) 。它使用TSQL ROW_NUMBER函数,您可以阅读 here 。对ROW_NUMBER函数的调用包含在CASE ... WHEN ... THEN ... END条件表达式中,如果它是第一次出现某个值,则只能写出col2的值。