2016-03-25 21 views
1

Testdaten zu holen:SQL-Abfrage alle Ergebnisse in einer Abfrage

id date  company location 
    ---------------------------------- 
    1 03/01/2016 ABC  india  
    2 03/25/2016 ABC  us 
    3 02/24/2016 ABC  india 
    4 02/25/2016 ABC  us 
    5 03/02/2016 ABC  india 

Abfrage # 1

select count(id) 
from table 
where company = 'ABC' 
    and date between 03/01/2016 and 03/31/2016 

Abfrage # 2

select count(id) 
from table 
where company = 'ABC' 
    and date between 02/01/2016 and 02/29/2016 

Brauchen Lage weise Zählung berechnen für aktuelle und vorherige Monate. Wie schreibe ich eine SQL-Abfrage, um den Standort wie in einer Abfrage zurückzugeben?

Erwartetes Ergebnis:

company currentmonth Previousmonth location 
    ABC  2     1   india 
    ABC  1     1   us 
+0

es hilft nicht, konnten Sie Testdaten in Form der Tempentabelle zur Verfügung stellen, die Ihren erwarteten Daten entspricht? – TheGameiswar

Antwort

2

Sie können versuchen etwas Subtrahieren aktuelle Datum Jahrmm Format (ex: 201603) und Jahrmm Format des Datums aus der Tabelle (ex: 201603) wenn es zu 0 als aktuellen Monat behandeln, sonst Vormonat hoffe, es wird helfen :

SELECT company, 
     location, 
     sum(iif(d = 0, 0, 1)) cm, 
     sum(iif(d = 0, 1, 0)) pm   
FROM (SELECT company, 
     location, 
     CONVERT(INT, 
     CONVERT(CHAR(4), GetDate(), 120) + 
     CONVERT(CHAR(2), GetDate(), 101) 
     ) - 
     CONVERT(INT, 
     CONVERT(CHAR(4), date, 120) + 
     CONVERT(CHAR(2), date, 101) 
     ) as d 
FROM table) vw 
GROUP BY company, location 
3

Versuchen:

select company, 
     sum(case when month(date)=month(getdate()) 
         then 1 else 0 end) as currentMonth, 
     sum(case when month(date)=month(dateadd(MONTH,-1,getdate())) 
         then 1 else 0 end) as Previuosmonth, 
     location 
    from yourTable 
where month(date) between month(dateadd(MONTH,-1,getdate())) and month(getdate()) 
    AND company='ABC' 
group by company, location 

Da Sie zwei Abfragen gemacht und Filter sowohl mit aktuellen Monat (März) und vorherige. Ich entschied mich, die Funktion MONTH zu verwenden, um den Monat vom aktuellen Datum (getdate()) des Systems zu extrahieren und 1 zu subtrahieren, so dass Sie immer den aktuellen Monat und den vorherigen haben werden.

EDIT

Wie von @DhananjayaKuppu mir das Problem für festgelegt, wenn Sie einen Monat im Januar haben, da die month Funktion eine ganze Zahl gibt sie 0 in meiner Berechnung zurückkehren würde. Jetzt ist es behoben.

+0

Danke, Können Sie mir bitte sagen, wie ich den aktuellen Monat und den vorherigen Monatsunterschied in Prozent als neue Spalte nach Standort anzeigen kann? – Sravanti

+0

Prozent bezogen auf die Summe? von beiden Monaten? Was wäre das Ergebnis? –

+0

Jorge, nur eine Frage würde Logik des vorherigen Monats funktioniert in Fällen, in denen der aktuelle Monat Januar ist und der Monat Dezember das Datum ist. Zu meinem Wissen wird Monat (Datum) 12 sein und (Monat (getDate()) -1) wird 0 zurückgeben und es wird möglicherweise nicht zur vorherigen Monatssumme hinzugefügt. Korrigiere mich, wenn ich falsch liege. –

Verwandte Themen