首页 > 解决方案 > 试图将许多 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

结果

标签: sqlsql-servertemp-tables

解决方案


好像你想了解一下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);

也不要像你那样使用BETWEENon datetimes 。您可能会丢失数据,因为不再包含第二个操作数的 00:00 点之后的任何数据。使用<和第二天的 00:00 作为边界。


推荐阅读