3

我有一个带有值 ID 和值的表

--------------
| id | value |
--------------
|  1 |  NULL |
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------
|  2 |  NULL |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------

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

所以结果应该如下所示。

--------------
| id | value |    
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------    
|  3 |     B |
--------------

如何做到这一点?使用 SQL Server 2005

4

2 回答 2

5

您可以使用常规的GROUP BY.

GROUP BY意志_

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

SQL 语句

SELECT  id
        , MIN(value)
FROM    YourTable
GROUP BY
        id

测试脚本

;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
于 2011-08-11T07:27:58.437 回答
1

这有点令人费解,但它应该可以解决问题:

select distinct x.id, x.value
  from table x
 where x.value is not null 
    or not exists 
       (select y.id 
          from table y 
         where y.id = x.id 
           and y.value is not null)
于 2011-08-11T07:41:08.627 回答