2015-02-01 13 views
5

Ogni anno abbiamo 12 mesi. Dovrei scrivere una query che selezioni in una tabella per ogni mese. Per esempio dovrei fare un rapporto che mi mostra ogni mese il conteggio delle transazioni.Loop through month in SQL Server

L'ho fatto ma nel modo sbagliato.

Ho scritto 12 query per ogni mese.

Ti piace questa:

SET @MONTH12M = (SELECT SUM(Amount) AS TOT 
       FROM [fidilio].[dbo].[CardTransactionLog] CL 
       JOIN CardTransaction CT ON CT.CardTransactionLogId = CL.CardTransactionLogId 
       WHERE (cl.TransactionPersianTimeStamp > N'1393/12/01' 
         AND cl.TransactionPersianTimeStamp< N'1393/12/31') 
) 

INSERT INTO #TEMP(MonthValue, CountValue, TypeValue) 
    SELECT 
     12, 
     CASE WHEN @MONTH12M IS NULL THEN 0 ELSE @MONTH12M END,4 

ho più 11 di query del genere.

Infine, recupero il risultato che ho inserito nella tabella temporanea.

Come posso farlo dinamicamente?

Come posso farlo con loop?

risposta

1

È possibile utilizzare group by per generare statistiche mensile:

select month(date_column) 
,  sum(amount) 
from YourTable 
group by 
     month(date_column) 

La funzione T-SQL month estrae il mese numerico da una colonna datetime.

+0

Grazie. ma se vedi la mia domanda ho somma, non posso raggrupparla entro il mese – salar

+2

Certo che puoi! Se ometti 'group by', per impostazione predefinita l'intero set in un gruppo. Puoi 'raggruppare per qualsiasi gruppo di colonne e utilizzare funzioni di aggregazione come' sum' per generare statistiche per gruppo. – Andomar

+0

Grazie mille, quindi non ho bisogno di loop? – salar