sql - 试图将许多 SQL 结果放入一个表中
问题描述
我有一个生成许多单独结果的 SQL 语句。我需要看看如何使它成为一个单一的结果集。
DECLARE @Table TABLE (Col1 INT, Col2 DATETIME)
DECLARE @StartDT DATETIME
SET @StartDT = '20160101'
WHILE @StartDT < '20200201'
BEGIN
SELECT
@StartDT AS [Month],
SUM([OrderTotal]) AS [Months Order Total]
FROM
[dbo].[tb_Order]
WHERE
ApplicationId = '24b48d78-1fb8-4842-af6d-11c58e940700'
AND OrderStatusId IN (10, 20, 30)
AND OrderDate BETWEEN @StartDT AND DATEADD(MONTH, 1, @StartDT)
--SELECT COUNT(*) FROM @Table WHERE Col2 >= @StartDT AND Col2 < DATEADD(MONTH,1,@StartDT) SET @StartDT = DATEADD(MONTH,1,@StartDT)
END
解决方案
好像你想了解一下GROUP BY
?您的意图似乎是在给定时间段内获得每月订单价值的总和。我认为您根本不需要任何程序代码。尝试:
SELECT concat(year(orderdate),
month(orderdate),
'01') month,
sum(ordertotal) ordertotal
FROM dbo.tb_order
WHERE applicationid = '24b48d78-1fb8-4842-af6d-11c58e940700'
AND orderstatusid IN (10,
20,
30)
AND orderdate >= '20160101'
AND orderdate < '20200301'
GROUP BY year(orderdate),
month(orderdate)
ORDER BY year(orderdate),
month(orderdate);
也不要像你那样使用BETWEEN
on datetime
s 。您可能会丢失数据,因为不再包含第二个操作数的 00:00 点之后的任何数据。使用<
和第二天的 00:00 作为边界。
推荐阅读
- excel - Excel:获取前 3 个值和名称
- algorithm - 如何在 |V| 中找到图的 MST 给定生成树加上另一条边的时间
- c# - 如何下载电子邮件附件 asp.net 网络表单?
- php - Laravel 模型创建覆盖
- java - 是什么影响了 JVM 内存分配超出 -Xmx?
- python - 如何改进 textacy.extract.semistructured_statements() 结果
- multithreading - 如何在 Rust 结构中创建线程局部变量?
- r - 如果另一列包含值,则过滤列值
- c++ - 当最小分配对齐为 16 字节时,如何进行 24 字节大小的分配?
- python - 无法为具有形状的数组分配 60.0 GiB.. Keras