回答

收藏

SQL按月求和-默认为零

技术问答 技术问答 88 人阅读 | 0 人回复 | 2023-09-13

目前,我正按月分组总结库存使用情况:
+ ~  e$ N' T! L1 |# v- ~SELECT      Inventory.itemid AS ItemID,           SUM(Inventory.Totalunits) AS Individual_MonthQty,           MONTH(Inventory.dadded) AS Individual_MonthAsNumber,           DATENAME(MONTH,Inventory.dadded) AS Individual_MonthAsStringFROM        InventoryWHERE       Inventory.invtype = 'Shipment'AND         Inventory.dadded >= @StartRangeAND         Inventory.dadded 这给了我预期的结果:
2 ^5 r1 a- K7 e6 ^9 NItemID  Kit_MonthQty    Kit_MonthAsNumber   Kit_MonthAsString131888  234                                                                                                                                                                                                                                August131888  455                                                                                                                                                                                                                                September131888   61                                                                                                                                                                                                                                                                                 October131888  20                                                                                                                                                                                                                                                                                                                                                                                                   December问题; l& b9 _; K! g; a/ ?
在没有数据的月份,我该怎么办才能回到     ,如下:; t2 m4 F$ l; p' {
ItemID  Kit_MonthQty    Kit_MonthAsNumber   Kit_MonthAsString131888                               January131888                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  February13188   0               3                   March131888                                                                                                                          April131888                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  May131888                                                                                                                           June131888                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  July131888  234                                                                                                                                                                                                                                August131888  455                                                                                                                                                                                                                                September131888   61                                                                                                                                                                                                                                                                                 October131888                                                                                                                                                                                                                                                                    November131888  20                                                                                                                                                                                                                                                                                                                                                                                                   December                , b8 R% h/ ]. F/ p# z; v- a6 L
    解决方案:                                                               
' E  M2 y( ~2 G, y7 o2 I                                                                在过去,我通过创建一个临时表来解决这个问题,它将保存所有所需的日期:* q5 E1 V; V6 |5 _% M: q
                CREATE TABLE #AllDates (ThisDate datetime null)    SET @CurrentDate = @StartRange    -- insert all dates into temp table    WHILE @CurrentDate 然后修改查询以连接表:3 y4 Y* A: n9 `0 `4 ?0 z1 C. L* C
SELECT      ALLItems.ItemId,           SUM(COALESCE(Inventory.Qty,0)) AS Individual_MonthQty,           MONTH(#AllDates.ThisDate) AS Individual_MonthAsNumber,           DATENAME(MONTH,#AllDates.ThisDate) AS Individual_MonthAsStringFROM        #AllDates            JOIN (SELECT DISTINCT dbo.Inventory.ItemId FROM dbo.Inventory)  AS ALLItems ON 1 =            LEFT JOIN Inventory ON DATEADD(dd,- DAY(Inventory.dadded)  1,Inventory.dadded) = #AllDates.ThisDate AND ALLItems.ItemId = dbo.Inventory.ItemIdWHERE                   #AllDates.ThisDate >= @StartRangeAND         #AllDates.ThisDate 然后,无论库存中是否有记录,你都应该有每月的记录。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则