2009-08-13 9 views
0

pour cela, j'ai beaucoup UNION ALL et comment utiliser UNPIVOT même résultat pour cette requêtecomment utiliser UNPIVOT pour le serveur SQL 2005

SElECT COUNT(*) FROM (
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.DIAGNOSES FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.UNDERLYINGCAUSE FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.UNDERLYINGCAUSE2 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.UNDERLYINGCAUSE3 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.UNDERLYINGCAUSE4 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.UNDERLYINGCAUSE5 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.COMPLICATIONS FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.COMPLICATIONS2 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.COMPLICATIONS3 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.COMPLICATIONS4 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.COMPLICATIONS5 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.OTHERDIAGNOSES FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.OTHERDIAGNOSES2 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.OTHERDIAGNOSES3 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.OTHERDIAGNOSES4 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN 
UNION ALL 
SELECT ADMMASTER.ADMWARD, IPDSUMMARY.OTHERDIAGNOSES5 FROM ADMMASTER INNER JOIN IPDSUMMARY ON ADMMASTER.AN = IPDSUMMARY.AN) a 
WHERE (DIAGNOSES IS NOT NULL) AND (ADMWARD IN (16,17)) AND (DIAGNOSES = 'Q792') 

Répondre

0

Vous pouvez changer la requête à quelque chose comme ceci:

SELECT count(*) 
FROM admmaster 
INNER JOIN ipdsummary ON admaster.an = ipdsummary.an 
UNPIVOT (Value FOR ColName IN (
    DIAGNOSES, UNDERLYINGCAUSE, ... 
)) as UnPvt 
WHERE ADMWARD IN (16,17) and Value = 'Q792' 

Puisque la valeur ne peut pas être NULL si c'est 'Q792', la vérification NULL peut être éliminée.

+0

Msg 156, niveau 15, état 1, ligne 1 Syntaxe incorrecte à proximité du mot clé 'FOR'. –

+0

Quel est le niveau de compatibilité de votre base de données? (sous Propriétés de la base de données -> Options) – Andomar

Questions connexes