Questione : GRUPPO dalle dichiarazioni di caso

Non necessariamente un problema, ma io ha una domanda considerare using le dichiarazioni di CASO nell'agglomerazione dell'interrogazione di queries.

My è qualche cosa di simile… alla SOMMA del

SELECT (COLA), la SOMMA (COLB), il @MyVar
del
CASE QUANDO 1 ALLORA 'Br/> del XXX'< QUANDO ALLORA 'Br/> del XXX'< 2 QUANDO ALLORA 'Br/>END del XXX'< 3 ALLORA 'Br/> del XXX'< QUANDO 4 COME @MyVar
di COLC
FROM MyTable
GROUP BY
CASE QUANDO 1 ALLORA 'Br/> del XXX'< QUANDO ALLORA 'Br/> del XXX'< 2 QUANDO ALLORA 'Br/>END

del XXX'< 3 ALLORA 'Br/> del XXX'< QUANDO 4… dove “XXX„ è i valori differenti secondo il caso. Domanda è, ci sarà dell'effetto di prestazione nella domanda di cui sopra perché I che ripete l'intera parte di CASO della domanda nel gruppo dalla clausola? O sarebbe migliore annidare la prima parte della domanda come un CTE ed allora fa un gruppo vicino sulla colonna 3? Come questa… la COLA del
SELECT del

WITH MyCTE (COLA, COLB, COLC) AS
(SOMMA del
SELECT (COLA), SOMMA (COLB), @MyVar
del
CASE QUANDO 1 ALLORA 'Br/> del XXX'< QUANDO ALLORA 'Br/> del XXX'< 2 QUANDO ALLORA 'Br/>END
FROM MyTable
del XXX'< 3 ALLORA 'Br/> del XXX'< QUANDO 4), COLB, COLC DAL GRUPPO di MyCTE da COLC



Points sarà data per la migliore risposta e tutti gli altri indicatori/punte/comments.
class= del

Risposta : GRUPPO dalle dichiarazioni di caso

Fatto correttamente, non dovrebbe fare alcuna differenza, l'ottimizzatore è abbastanza astuto riutilizzare le espressioni.
Ma il vostro CTE non funzionerà che senso - ancora ha bisogno del gruppo vicino nel CTE in se e non avete guadagnato nulla.

La vista ad-hoc assomiglierebbe a questa:

selezionare la somma (cola), la somma (ColB), MyVar da
(Cola PRESCELTA, ColB,
 METTERE @MyVar
     QUANDO 1 ALLORA “XXX„
     QUANDO 2 ALLORA “XXX„
     QUANDO 3 ALLORA “XXX„
     QUANDO 4 ALLORA “XXX„
 CONCLUDERE MyVar
 Da MyTable) v
gruppo da MyVar

Il CTE è lo stesso.
Altre soluzioni  
 
programming4us programming4us