2009-08-11 3 views
0
SELECT * FROM 
(SELECT BAR.DIAGNOSES FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.DIAGNOSES IS NOT NULL) 
UNION ALL 
SELECT BAR.UNDERLYINGCAUSE FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.UNDERLYINGCAUSE IS NOT NULL) 
UNION ALL 
SELECT BAR.UNDERLYINGCAUSE2 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.UNDERLYINGCAUSE2 IS NOT NULL) 
UNION ALL 
SELECT BAR.UNDERLYINGCAUSE3 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.UNDERLYINGCAUSE3 IS NOT NULL) 
UNION ALL 
SELECT BAR.UNDERLYINGCAUSE4 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.UNDERLYINGCAUSE4 IS NOT NULL) 
UNION ALL 
SELECT BAR.UNDERLYINGCAUSE5 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.UNDERLYINGCAUSE5 IS NOT NULL) 
UNION ALL 
SELECT BAR.COMPLICATIONS FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.COMPLICATIONS IS NOT NULL) 
UNION ALL 
SELECT BAR.COMPLICATIONS2 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.COMPLICATIONS2 IS NOT NULL) 
UNION ALL 
SELECT BAR.COMPLICATIONS3 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.COMPLICATIONS3 IS NOT NULL) 
UNION ALL 
SELECT BAR.COMPLICATIONS4 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.COMPLICATIONS4 IS NOT NULL) 
UNION ALL 
SELECT BAR.COMPLICATIONS5 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.COMPLICATIONS5 IS NOT NULL) 
UNION ALL 
SELECT BAR.OTHERDIAGNOSES FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.OTHERDIAGNOSES IS NOT NULL) 
UNION ALL 
SELECT BAR.OTHERDIAGNOSES2 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.OTHERDIAGNOSES2 IS NOT NULL) 
UNION ALL 
SELECT BAR.OTHERDIAGNOSES3 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.OTHERDIAGNOSES3 IS NOT NULL) 
UNION ALL 
SELECT BAR.OTHERDIAGNOSES4 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.OTHERDIAGNOSES4 IS NOT NULL) 
UNION ALL 
SELECT BAR.OTHERDIAGNOSES5 FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN WHERE FOO.ADMWARD IN (16,17) AND (BAR.OTHERDIAGNOSES5 IS NOT NULL)) 

Этот результат Msg 102, Level 15, State 1, Line 32 Неверный синтаксис возле ')'.Как выбрать в результирующем наборе UNION ALL операция

+3

Похож на спам, завернутый в SQL-запрос. –

+0

IPDSUMMARY, IPDSUMMARY, IPDSUMMARY, спам, ADMMASTER и IPDSUMMARY не получили большого количества спама. * Викинги поют ... * – zombat

+0

Я бы серьезно подумал о редизайне базы данных, если бы мне пришлось написать такой запрос. – idstam

ответ

0

Но, конечно, вы имеете в виду «UNPIVOT».

SELECT * FROM 
    (SELECT FOO.ADMWARD, BAR.* FROM FOO INNER JOIN BAR ON FOO.AN = BAR.AN 
     WHERE FOO.ADMWARD IN (16,17) 
    ) t 
    UNPIVOT 
    (Diag FOR PropType in (DIAGNOSES 
     , UNDERLYINGCAUSE 
     , UNDERLYINGCAUSE2 
     , UNDERLYINGCAUSE3 
     , UNDERLYINGCAUSE4 
     , UNDERLYINGCAUSE5 
     , COMPLICATIONS 
     , COMPLICATIONS2 
     , COMPLICATIONS3 
     , COMPLICATIONS4 
     , COMPLICATIONS5 
     , OTHERDIAGNOSES 
     , OTHERDIAGNOSES2 
     , OTHERDIAGNOSES3 
     , OTHERDIAGNOSES4 
     , OTHERDIAGNOSES5 
     ) 
    ) u; 

Не уверен, что вы хотите назвать столбцами. Вероятно, вам захочется выработать соответствующий подзапрос, который нужно ввести для 't'. И это будет обрабатывать NULL для вас тоже.

4

Добавление псевдонима после последнего Paren:

select 
    * 
from 
    (.... unions go here ...) a 

Вам не нужно обернуть это в select *, чтобы получить набор результатов, но я предполагаю, что вы используете его в качестве подзапроса. Когда вы выполняете подзапрос как набор результатов, вам нужно его псевдоним, иначе столбцы не знают, откуда они.

+0

Или удалите с помощью select * from() и просто оставьте все соединения. –

+0

Это помогло мне решить проблему с гораздо более простым запросом (выбор из результатов одного UNION). Спасибо, что объяснили «почему» за вашим ответом! – Symmetric

0

Вам не нужен внешний select * from - в основном, просто поместите все выделки с объединением всех чередующихся - он должен работать.

+0

gotta love this site - есть ответ и голосование перед отправкой ответа :) – OpenSource

Смежные вопросы