gre*_*121 0 sql t-sql sql-server
我尝试多次循环一个sql语句来检索特定商店的每周收入.这是我最好的猜测不起作用.
SELECT *
DECLARE @i int = 0
WHILE @i < 52 BEGIN
SET @i = @i + 1
FROM dbo.revenue
WHERE DATEPART(WW, date) = @i
AND storenumber = '005'
END
Run Code Online (Sandbox Code Playgroud)
你实际上从不想在SQL中编写循环.
SELECT
SUM(earnings) weekly_earnings
FROM
dbo.revenue
WHERE
storenumber = '005'
AND date >= '2015-01-01'
AND date < '2016-01-01'
GROUP BY
DATEPART(WW, date)
Run Code Online (Sandbox Code Playgroud)
左对联包含52行(1到52)的帮助表,表示填充空白的周数(没有收入的周数).
请注意,date >= '2015-01-01' AND date < '2016-01-01'因为:
DATEPART(YY, date) = 2015因为,作为计算,表达式将无法在date列上使用索引,>=而且<可以使用索引编辑:您可以在SQL Server上使用递归CTE而不是临时表:
WITH WeekNumbers (WkNum) AS (
SELECT 1 AS WkNum
UNION ALL
SELECT w.WkNum + 1 FROM WeekNumbers w WHERE w.WkNum <= 52
)
SELECT
w.WkNum,
SUM(r.earnings) weekly_earnings
FROM
WeekNumbers w
LEFT JOIN dbo.revenue r ON w.WkNum = DATEPART(WW, r.date)
WHERE
r.storenumber = '005'
AND r.date >= '2015-01-01'
AND r.date < '2016-01-01'
GROUP BY
w.WkNum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |