2016-11-02 3 views
0

zeigt habe ich zur Zeit einen Skript zurückkehr 3 Spalten:alle Termine in einem bestimmten Zeitraum

-Code, Datum, CountRows (siehe Bild unten):

enter image description here

Jeder Schlüssel einen Start hat und Ende Datum. Ich möchte, dass alle Daten zurückkommen, unabhängig davon, ob countRows 0 ist, weil für dieses Datum keine Daten vorliegen. d. h. Zeile 10 und 11 fehlen 2 Daten dazwischen.

EDIT

Also habe ich die linke kommen wie:

SELECT c.calendarDate, x.* 
FROM Calendar c 
LEFT JOIN (
SELECT key, orderDate, keyStartDate, keyEndDate, count(*) FROM multiple tables 
GROUP BY ...) x ON c.date >= x.startDdate AND c.date < DATEADD(DD,1,x.endDate) 

Ausgang:

enter image description here

Das ist, was es tut. Grundsätzlich gibt das Bestelldatum nicht alle Daten zurück, wo Daten nicht existieren. Also brauche ich den linken Join, um sicherzustellen, dass die Daten zwischen Anfangs- und Enddatum sind und wo immer das Bestelldatum keine Daten findet, dann gibt das Kalenderdatum das Datum mit der Zahl (*) zurück.

+0

Tag Ihre Frage mit der Datenbank. –

+0

Ah ja, habe ich gerade gemacht. – Faiz

Antwort

1

Erstellen Sie eine Kalendertabelle und links verbinden Sie sich mit Ihren Daten. In diesem Beispiel erstelle ich eine temporäre Kalendertabelle, aber aus Gründen der Leistung und zur Wiederverwendbarkeit würde ich vorschlagen, eine permanente zu erstellen.

declare @calendar table (someDate date); 
declare @x date = '11/1/2015'; 

while @x <= '12/1/2015' begin 
    insert into @calendar values (@x); 
    set @x = dateadd(d, 1, @x); 
end; 

--generate some sample data 
declare @facts table (someDate date); 
insert into @facts values ('11/1/2015'), ('11/1/2015'), ('11/10/2015'), ('11/20/2015'), ('11/21/2015'), ('11/5/2015'), ('11/9/2015'); 

select 
    cal.someDate, 
    CountRows = count(f.SomeDate) 
from 
    @calendar cal 
    left join @facts f on cal.someDate = f.someDate 
group by 
    cal.someDate 
order by 
    cal.someDate; 

Die Antwort auf diese Frage hat einige gute Vorschläge für einen Kalender Tabelle erstellen: Sie verwenden

How to create a Calender table for 100 years in Sql

+0

Danke. Der Link war sehr nützlich – Faiz

+0

Hey, so habe ich den Tisch gemacht und versucht, links zu sehen, siehe oben in Frage. Ich habe es am Ende bearbeitet – Faiz

+0

Wenn Sie Anweisung auswählen, wählen Sie * aus x, aber das Datum wird in c sein. Also, etwas tun wie: Wählen c.date, x. * –

Verwandte Themen