2009-06-09 4 views
-1

Diese Abfrage gibt mich zuerst unter der Tabelle zurück. beispielsweise; 2009-06-01 00:00:00 Leute geben mein System '41' mal ein. Ich brauche zweite TabelleSql Abfrage Monatliches Ergebnis, aber wie?

declare @date1 smalldatetime, @date2 smalldatetime , @countgap int, @page nvarchar(100) 
select @date1='2009-01-01', @date2='2009-12-30 23:59:59' ,@countgap=1, @page='Tüm Sayfalar' 

declare @@date1 smalldatetime,@@date2 smalldatetime , @COUNT INT   
    select @@[email protected], @@[email protected] , @COUNT=1   
    select @@date1 TARIH , @COUNT SIRA   
    INTO #TMP   
    WHILE @@date1 < @@date2   
BEGIN   
    SELECT @@date1 = DATEadd(month,@countgap,@@date1) , @COUNT = @COUNT +1   
    INSERT INTO #TMP   
    select @@date1 TARIH , @COUNT SIRA   
END 
    select t1.TARIH, t1.SIRA, VISITINGCOUNT = isnull(t2.TARIH, 0)   
    from #TMP t1   
    left join ( 
    select count(page) as TARIH,    
     datepart(month,Date) as SIRA   
    from scr_StatisticaLog    
    where Date between @date1 and @date2 and 
     ([email protected] or @page='Tüm Sayfalar') and 
      ProcessType='PageView'  
    GROUP BY datepart(month,Date) 
      )t2 on t2.SIRA = t1.SIRA   
    order by t1.SIRA   
    return  

2009-01-01 00:00:00 1 0 
2009-02-01 00:00:00 2 0 
2009-03-01 00:00:00 3 0 
2009-04-01 00:00:00 4 1 
2009-05-01 00:00:00 5 1 
2009-06-01 00:00:00 6 41 
2009-07-01 00:00:00 7 0 
2009-08-01 00:00:00 8 0 
2009-09-01 00:00:00 9 0 
2009-10-01 00:00:00 10 0 
2009-11-01 00:00:00 11 0 
2009-12-01 00:00:00 12 1 
2010-01-01 00:00:00 13 0 


2009-January  12 1 

+0

Und was ist die zweite Tabelle? – Welbog

+0

Fragen Sie nur, wie man Datumsangaben formatiert? – Welbog

+0

ja ich brauche '2009-Januar 12 1' – Penguen

Antwort

0

, was Sie brauchen, ist ein calendar table mit jedem Tag drin ist. Danach musst du dich erst anschließen und deinen zweiten Tisch bekommen.

EDIT: ahh .. neue Infos von Plakat Art Ungültigmachungseinträge diese Antwort ...

+0

Wenn Ihre Antwort vollständig ungültig ist, löschen Sie es einfach. –

+0

nicht wholy. es ist immer noch ein guter Rat :) –

0

Welbog Antwort funktioniert.

Ich würde ein bisschen weiter gehen. In MySQL Land würde ich nur eine linke (10) auf das Datum und gruppieren nach dem. Sie könnten dann Ihre gesamte Abfrage in einem Durchgang ohne temporäre Tabellen oder Schleifen durchführen. Ich denke, SQL Server lässt Sie ein Datum eingliedern, aber wenn nicht, können Sie es tun, indem Sie das Datum erstellen, wie Welbog es Ihnen gezeigt hat.

Verwandte Themen