选择不包含NULL的不同多个字段

Saa*_*nch 3 sql t-sql distinct-values notnull

我有一个包含Value ID和Value的表

--------------
| id | value |
--------------
|  1 |  NULL |
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------
|  2 |  NULL |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------
Run Code Online (Sandbox Code Playgroud)

我需要从表中选择不同的id和相应的值.选择Id时应该是唯一的,如果它在值字段中有多个值,则它应该只检索非NULL值

所以结果应该如下.

--------------
| id | value |    
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------    
|  3 |     B |
--------------
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?使用SQL Server 2005

Lie*_*ers 5

你可以使用常规GROUP BY.

GROUP BY遗嘱

  • 消除NULL值,1因为存在其他值.
  • 保留NULL值,2因为它只有NULL值.

SQL语句

SELECT  id
        , MIN(value)
FROM    YourTable
GROUP BY
        id
Run Code Online (Sandbox Code Playgroud)

测试脚本

;WITH q (id, value) AS (
    SELECT 1, NULL
    UNION ALL SELECT 1, 'A'
    UNION ALL SELECT 2, NULL
    UNION ALL SELECT 2, NULL
    UNION ALL SELECT 3, 'B'
    UNION ALL SELECT 3, 'B'
    UNION ALL SELECT 3, 'B'
)
SELECT  id
        , MIN(value)
FROM    q       
GROUP BY
        id
Run Code Online (Sandbox Code Playgroud)

  • @gvLearner:使用顶级脚本.底部脚本只是一个概念验证,用于显示它将起作用,查询中包含的数据使得不需要新表. (2认同)