Search code examples
sqlt-sqldistinct-valuesnotnull

Select distinct multiple field without NULL


I have a table with Value ID and Value

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

I need to select distinct id and corresponding value from the table. When selecting the Id should be unique and if it is having multiple values in the value field it should retrieve only not NULL values

So the result should be like below.

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

How to achieve this? using SQL server 2005


Solution

  • You can use a regular GROUP BY.

    The GROUP BY will

    • eliminate the NULL value from 1 because other values are present.
    • retain the NULL value for 2 because it only has NULL values.

    SQL Statement

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

    Test script

    ;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