Abrufen der Wochennummer als Alias ​​in der SQL-Analyse

Oct 01 2020

Das ist meine erste Frage hier. Hoffentlich ist mir klar genug, wonach ich suche.

Mein Problem ist folgendes: Bei dieser Analyse möchte ich aus den letzten 7 Wochen die zusammengefassten Preise jeder Woche erhalten. Es funktioniert ohne Probleme, aber jetzt möchte ich die Wochenzahl jeder Woche als Alias ​​hinzufügen.

In meinen Tests habe ich zum Beispiel so etwas verwendet:

DECLARE @week7 varchar(10)
SET @week7 = DATEPART(wk, GetDate())

Eines meiner Probleme ist, dass ich nicht mit "EXEC" arbeiten darf.

Dies ist nur ein Beispiel meiner Analyse:

SELECT DISTINCT(
SELECT SUM(Price)
FROM tblBookingdata
WHERE(Datum BETWEEN DATEADD(wk, -7, DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) AND DATEADD(wk, -6, DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))))) AS '7 weeks ago', (
SELECT SUM(Price)
FROM tblBookingdata
WHERE(Datum BETWEEN DATEADD(wk, -6, DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) AND DATEADD(wk, -5, DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))))) AS '6 weeks ago'

Ich möchte, dass der Spaltenname die Wochennummer aus jeder Unterauswahl anzeigt. Dass die Ausgabe zum Beispiel für diese Woche wäre: 40 (als Spaltenname) und 900 als Preisübersicht.

Also habe ich versucht, hier mit DECLARE zu arbeiten und @ week7 zum Beispiel mit der aktuellen Wochennummer zuzuweisen. Aber hier steckte ich fest, weil es so aussieht, als müsste ich hier mit EXEC arbeiten.

Ist dies nur ohne "EXEC" möglich oder gibt es andere Lösungen, um dies zu lösen? Ich habe im WWW gesucht, aber momentan stecke ich ein bisschen fest. Vielen Dank für jede Hilfe! :) :)

Antworten

KyleUp Oct 01 2020 at 16:46

Ich denke, die DateDiff-Funktion ist dein Freund hier. Verwenden Sie SQL Server? Dies zeigt keine Zeile für die Woche an, wenn in dieser Woche keine Datensätze vorhanden sind, dies sollte jedoch nahe an dem liegen, was Sie möchten.

select WeeksAgo, sum(Price) as Price from (
    select
        Price
        ,Datediff(wk, Datum, getDate()) as WeeksAgo
        ,Datum --not used
    from
        tblBookingdata
)DataByWeek
where WeeksAgo between 0 and 7 --should this be 0-6?
group by WeeksAgo
SteveC Oct 01 2020 at 16:49

Ich denke, Sie suchen so etwas. Die vorherigen 7 Wochen werden aus GETDATE basierend auf einer Zahlentabelle mit 1, 2, 3, ... berechnet. 7. Dann werden die Buchungspreise nach Wochen zusammengefasst, wobei das Datum innerhalb der vorherigen 7 Wochen liegt. Dies zeigt NULL in price_sum an, wenn in dieser Woche keine Verkäufe getätigt wurden.

drop table if exists #tblBookingdata;
go
create table #tblBookingdata(
    Datum        date not null,
    Price        int not null);
go

;with 
weeks_cte(wk) as (
    select datepart(wk, dateadd(wk, w*-1,  getdate()))
    from (values (1),(2),(3),(4),(5),(6),(7)) v(w)),
bookings_cte(wk, price_sum) as (
    select datepart(wk, Datum), sum(Price) 
    from #tblBookingdata
    where Datum>dateadd(wk, -7, getdate())
    group by datepart(wk, Datum))
select *
from weeks_cte wc
     left join bookings_cte b on wc.wk=b.wk;