Ho una query come la seguente:semplificare SQL utilizzando CTE
SELECT A.a, A.b, B.c,
(CASE WHEN ... THEN ... ELSE ... END) AS CalculatedValue,
B.d
FROM dbo.TableA A INNER JOIN
dbo.TableB B ON (...)
WHERE (CASE WHEN ... THEN ... ELSE ... END) BETWEEN @DayStart AND @DayEnd
GROUP BY A.a, (CASE WHEN ... THEN ... ELSE ... END), B.c
per evitare di ripetere più volte la stessa espressione: (CASE WHEN ... THEN ... ELSE ... END)
Ho voluto definire un CTE e query quale tabella utilizzando nella select, dove e il gruppo con l'espressione CalculatedValue
purtroppo questo non funziona perché i selezionati deve includere già group by
durante la creazione del CTE
v'è alcuna l'altro modo che potrei usare per non ripetere il CASE WHEN...
così tante volte?
Grazie a JNK, questo ha risolto il problema, lo stesso tempo di esecuzione, ma in modo codice più pulito rispetto a prima, +1 e bandiera verde ;-) –
Felice di aiutare! L'ho saputo solo di recente e ha reso molte cose più semplici. – JNK
Diventa davvero divertente quando si incapsula la logica comune in funzioni con valori di tabella. Le domande possono finire per leggere 'table CROSS APPLY udf1 CROSS APPLY udf2 CROSS APPLY udf3' e tutto il 'normale' SQL nascosto! – MatBailie