Wir haben die folgende Abfrage in einem unsere gespeicherten Prozeduren ausgeführt wird:mehrere where-Klauseln mit derselben Spalte in SQL Server
SELECT
WOffice AS office,
RIGHT(JobTitle,4) JOBTITLE,
SUM(ISNULL(rHours,0)) AS rcount,
SUM(ISNULL(rdollars,0)) + SUM(ISNULL(amount,0)) AS rdollars,
CAST (DATEADD(wk,DATEDIFF(wk,0,paydate),-1)AS DATE)AS [week]
FROM
[dbo].[warehouse]
WHERE
paydate BETWEEN paydate AND DATEADD(DAY, 7, paydate)
AND (paydate BETWEEN @WkStart AND @EzMaxDate)
AND (PayDate BETWEEN @Seasonstart AND @SeasonEnd)
AND SUBSTRING(JobTitle,1,1) LIKE '%[A-Z]%'
GROUP BY
WOffice, RIGHT(JobTitle, 4), DATEADD(wk, DATEDIFF(wk, 0, paydate), -1)
In diesem Code ist die paydate Spalte in mehrere verwendeten Klauseln wo. Gibt es eine effizientere Möglichkeit, die obige Logik in SQL zu schreiben?
'paydate zwischen paydate und DATEADD (Tag, 7, paydate)', was versuchst du hier zu machen? Es ist im Grunde das gleiche wie 'paydate <= DATEADD (Tag, 7, paydate)' – sagi
Allgemeine GROUP BY-Regel: "Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument sein einer eingestellten Funktion. " – jarlh
@sagi Ich gruppiere die Tabellendaten tatsächlich wöchentlich. – bmsqldev