2015-02-01 8 views
5

Co roku mamy 12 miesięcy. Powinienem napisać zapytanie, które wybiera się w jednej tabeli na każdy miesiąc. Na przykład powinienem sporządzić raport, który pokazuje mi co miesiąc liczbę transakcji.Pętla przez miesiąc w SQL Server

Zrobiłem to, ale w niewłaściwy sposób.

Napisałem 12 zapytań dla każdego miesiąca.

Jak to:

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 

Mam 11 more zapytanie takiego.

Wreszcie pobieram mój wynik, wstawiam do tabeli temp.

Jak mogę to zrobić dynamicznie?

Jak mogę to zrobić za pomocą pętli?

Odpowiedz

1

group by można użyć do generowania danych statystycznych miesięcznie:

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

Funkcja T SQL month wyodrębnia miesiąc numeryczny z kolumny datetime.

+0

Dziękuję. ale jeśli widzę moje zapytanie, mam sumę, nie mogę pogrupować jej według miesiąca – salar

+2

Oczywiście, że możesz! Jeśli pominiesz 'group by', domyślnie będzie to cały zestaw w jednej grupie. Możesz "pogrupować" według dowolnego zestawu kolumn i użyć funkcji agregujących, takich jak "suma" do generowania statystyk dla grupy. – Andomar

+0

Dziękuję bardzo, więc nie potrzebuję żadnej pętli? – salar