Выделите несколько разных полей без NULL - PullRequest
3 голосов
/ 11 августа 2011

У меня есть таблица с идентификатором значения и значением

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

Мне нужно выбрать отдельный идентификатор и соответствующее значение из таблицы.При выборе Id должен быть уникальным, и если он имеет несколько значений в поле значения, он должен извлекать только не NULL значения

Таким образом, результат должен быть таким, как показано ниже.достичь этого?с использованием SQL Server 2005

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Вы можете использовать обычный 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
1 голос
/ 11 августа 2011

Это немного запутанно, но это должно сработать:

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)
...