3

値IDと値のテーブルがあります

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

テーブルから個別のIDと対応する値を選択する必要があります。Idを選択するときは一意である必要があり、値フィールドに複数の値がある場合は、NULL値ではなくIDのみを取得する必要があります。

したがって、結果は次のようになります。

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

これを達成する方法は?SQLServer2005を使用する

4

2 に答える 2

5

通常のを使用できますGROUP BY

GROUP BY意志_

  • NULL他の値が存在するため、から値を削除します1
  • 値しかないため、のNULL値を保持します。2NULL

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 に答える