You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按地点汇总发货金额:无数据地点显示$0的技术需求问询

解决方案:显示所有地点的发货金额(含无发货地点)

你的问题出在没有以完整的地点表作为查询基础,原查询仅从发货表取数据,导致无发货记录的地点无法被返回。要实现所有地点都显示、无发货地点金额为$0的需求,需要用**左连接(LEFT JOIN)**关联地点表和发货表,再配合ISNULL处理空值。

针对你提供的原始代码片段修改(假设Facility_Table是地点表)

SELECT 
    ft.facility AS 'Facility',
    ISNULL(SUM(d.exten), 0) AS 'Shipped'
FROM [Facility_Table] ft
-- 这里的关联条件要根据实际表结构调整,比如用地点ID或名称匹配
LEFT JOIN dtorder d ON ft.facility = d.facility 
GROUP BY ft.facility

结合你提供的示例DDL/DML的完整可运行查询

DECLARE @Locations TABLE (LocationID BIGINT IDENTITY, LocationName NVARCHAR(50))
DECLARE @Shipments TABLE (ShipmentID BIGINT IDENTITY, LocationID BIGINT, ShipmentAmount DECIMAL(10,4))

INSERT INTO @Locations (LocationName) VALUES
('Main Warehouse'),('New York Warehouse'),('Los Angeles Warehouse')

INSERT INTO @Shipments (LocationID, ShipmentAmount)
SELECT TOP 50 ROUND(((2 - 1) * Rnd1 + 1), 0), ROUND(((500 - 1) * Rnd1 + 1), 4)
  FROM (
        VALUES(
               RAND(CONVERT(VARBINARY,NEWID(),1)),
               RAND(CONVERT(VARBINARY,NEWID(),1))
              )
       ) a(Rnd1,Rnd2)
  CROSS APPLY sys.sysobjects

-- 核心查询:显示所有仓库的发货金额
SELECT 
    l.LocationName AS 'Facility',
    -- 若要显示$符号,可改用FORMAT函数:FORMAT(ISNULL(SUM(s.ShipmentAmount), 0), 'C', 'en-US')
    ISNULL(SUM(s.ShipmentAmount), 0) AS 'Shipped'
FROM @Locations l
LEFT JOIN @Shipments s ON l.LocationID = s.LocationID
GROUP BY l.LocationName
ORDER BY l.LocationName

关键逻辑说明

  • LEFT JOIN:以地点表(@Locations)为左表,强制返回左表的所有行,即使右表(@Shipments)没有匹配的发货记录
  • ISNULL(SUM(...), 0):当某地点无发货记录时,SUM(ShipmentAmount)会返回NULL,用ISNULL将其替换为0
  • GROUP BY:按地点名称分组,确保每个地点只返回一行汇总数据

额外提示

如果需要将金额格式化为带$符号的样式(比如$0.00),可以使用SQL Server的FORMAT函数替换ISNULL部分:

FORMAT(ISNULL(SUM(s.ShipmentAmount), 0), 'C', 'en-US') AS 'Shipped'

内容的提问来源于stack exchange,提问作者k. hens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:40:25