2014-10-31 6 views
0

Попытка группы по результату сильфона:Группировка с неопределенными значениями

+-------------+------+ 
| ID | Coln1 | Coln2 | 
+-------------+------+ 
| 10 |  A | NULL | 
| 10 | NULL |  X | 
| 15 |  B | NULL | 
| 15 | NULL |  Y | 
| 20 |  C | NULL | 
| 20 | NULL |  Z | 
+--------------+-----+ 

С следующим выберите:

SELECT * FROM 
(
SELECT 
    DB1.dbo.TABLE1.id AS ID, 
    DB1.dbo.TABLE1.Coln1 AS Coln1, 
    NULL AS Coln2 
FROM 
    DB1.dbo.TABLE1 
UNION 
SELECT 
    DB2.dbo.TABLE2.id AS ID, 
    NULL AS Coln1, 
    DB2.dbo.TABLE2.Coln2 AS Coln2 
FROM 
    DB2.dbo.TABLE2 
) AS A 
GROUP BY 
    ID, 
    Coln1, 
    Coln2 
ORDER BY ID ASC 

Ожидая это:

+-------------+------+ 
| ID | Coln1 | Coln2 | 
+-------------+------+ 
| 10 |  A |  X | 
| 15 |  B |  Y | 
| 20 |  C |  Z | 
+--------------+-----+ 

не повезло. Пытался использовать некоторые HAVING, не повезло ни одному. Спасибо за любую информацию об этом.

ответ

3

aggregate function должен помочь вам. Агрегатная функция устранит NULL values.Try этого

SELECT ID, max(Coln1), max(Coln2) 
FROM tablename 
GROUP BY 
ID 

Обновить ваш запрос, как это ..

SELECT ID, 
     Max(Coln1), 
     Max(Coln2) 
FROM (SELECT DB1.dbo.TABLE1.id AS ID, 
       DB1.dbo.TABLE1.Coln1 AS Coln1, 
       NULL     AS Coln2 
     FROM DB1.dbo.TABLE1 
     UNION 
     SELECT DB2.dbo.TABLE2.id AS ID, 
       NULL     AS Coln1, 
       DB2.dbo.TABLE2.Coln2 AS Coln2 
     FROM DB2.dbo.TABLE2) AS A 
GROUP BY ID 
ORDER BY ID ASC 
+0

Спасибо. Мой случай более сложный, чем пример, который я публикую. Я использую 'UNION' с некоторыми столбцами« NULL ». Попробуем ваше решение. – Khrys

+0

Можно ли использовать какой-то «ХВОЙ», чтобы решить эту проблему? – Khrys

+0

Без учета данных комментировать нельзя. Согласно примеру ура нет необходимости иметь –

1

Вы просто должны изменить Max функция используется для выбора наиболее высокие значения & эта функция очень helful для избежания для NULL значений

SELECT ID, max(Coln1), max(Coln2) 
FROM ID, Coln1, Coln2 
GROUP BY 
ID 
0

Почему вы делаете союз?

SELECT 
    t1.id AS ID, 
    t1.Coln1 AS Coln1, 
    t2.Coln2 AS Coln2 

FROM 
    DB1.dbo.TABLE1 t1 

    JOIN DB2.dbo.TABLE2 t2 
     ON t1.id = t2.id 
Смежные вопросы