Fråga : GRUPP VID fallmeddelanden

Inte nödvändigtvis ett problem, men jag har en ifrågasätta att betrakta using FALLmeddelanden, i att samla querying för queries.

My, är något som är liknande till… SUMMAN för

SELECT (COLA), SUMMAN (COLB), @MyVar
för
CASE NÄR 1 DÄREFTER 'XXX'
NÄR DÄREFTER 'br/> för XXX'< 2 NÄR DÄREFTER 'br/>END för XXX'< 3 DÄREFTER 'XXX'
NÄR 4 SOM COLC
FROM MyTable
GROUP BY
CASE @MyVar
NÄR 1 DÄREFTER 'XXX'
NÄR DÄREFTER 'br/> för XXX'< 2 NÄR 'br/>END

för XXX'< 3 DÄREFTER 'XXX'
, NÄR 4…, var ”XXX” är olik, värderar DÄREFTER enligt fallet. Ifrågasätta är, ska där är någon kapacitet får effekt i den ovannämnda queryen därför att I som upprepar den hela FALLdelen av queryen i gruppen vid sats? Eller skulle det var bättre att bygga bo den första delen av queryen som en CTE och gör därefter en grupp by på kolonn 3? Gilla detta… COLA för
SELECT för

WITH MyCTE (COLA, COLB, COLC) AS
(SUMMAN för
SELECT (COLA), SUMMAN (COLB), @MyVar
för
CASE NÄR 1 DÄREFTER 'XXX'
NÄR DÄREFTER 'br/> för XXX'< 2 NÄR DÄREFTER 'br/>END
FROM MyTable
för XXX'< 3 DÄREFTER 'XXX'
NÄR 4), COLB, COLC FRÅN den MyCTE GRUPPEN AV ska COLC



Points ges för bäst svar och några andra pekare/spetsar/comments.
" klar "

Svar : GRUPP VID fallmeddelanden

Gjort korrekt, det bör inte göra någon skillnad, optimizeren är smart nog att återanvända uttryck.
Men din CTE ska inte arbete ditåt - den stilla behov gruppen by i CTEN sig själv och du har inte nått något.

Det ad hoc- beskådar skulle looknågot liknande detta:

välj summan (ColA), summan (ColB), MyVar från
(VALD ColA, ColB,
 CASE @MyVar
     NÄR 1 DÄREFTER ”XXX”,
     NÄR 2 DÄREFTER ”XXX”,
     NÄR 3 DÄREFTER ”XXX”,
     NÄR 4 DÄREFTER ”XXX”,
 AVSLUTA MyVar
 FRÅN MyTable) v
grupp av MyVar

CTEN är samma.
Andra lösningar  
 
programming4us programming4us