J'ai une requête dont le code ressemble à ceci:Comment transposer les colonnes en lignes
SELECT DocumentID, ComplexSubquery1 ... ComplexSubquery5
FROM Document
WHERE ...
ComplexSubquery sont tous les champs numériques qui sont calculés à l'aide, duh, complexes sous-requêtes.
Je voudrais utiliser cette requête comme une sous-requête à une requête qui génère un résumé comme le suivant:
Field DocumentCount Total
1 dc1 s1
2 dc2 s2
3 dc3 s3
4 dc4 s4
5 dc5 s5
Où:
dc<n> = SUM(CASE WHEN ComplexSubquery<n> > 0 THEN 1 END)
s <n> = SUM(CASE WHEN Field = n THEN ComplexSubquery<n> END)
Comment pourrais-je faire dans SQL Server ?
REMARQUE: Je sais que je pourrais éviter le problème en supprimant la requête initiale et en utilisant les syndicats:
SELECT '1' AS TypeID,
SUM(CASE WHEN ComplexSubquery1 > 0 THEN 1 END) AS DocumentCount
SUM(ComplexSubquery1) AS Total
FROM (SELECT DocumentID, BLARGH ... AS ComplexSubquery1) T
UNION ALL
SELECT '2' AS TypeID,
SUM(CASE WHEN ComplexSubquery2 > 0 THEN 1 END) AS DocumentCount
SUM(ComplexSubquery2) AS Total
FROM (SELECT DocumentID, BLARGH ... AS ComplexSubquery2) T
UNION ALL
...
Mais je veux éviter cette voie, parce que le code redondant fait mes yeux saignent. (En outre, il y a une réelle possibilité que le nombre de sous-requêtes complexes croisse dans le futur.)
Avez-vous regardé 'unpivot'? –
Non. Qu'est-ce que c'est? – pyon