【问题标题】:T-SQL Query not returning proper resultsT-SQL 查询没有返回正确的结果
【发布时间】:2013-07-17 16:46:29
【问题描述】:

我有一个查询,我想获取零件的销售额。我希望从零件表中获得完整的结果,如果在时间范围内该零件没有销售,我希望在销售列中看到 0。我没有看到。我只是得到有销售的零件。

SELECT
    Part,
    Sum(Sales)
FROM
    dbo.Parts
    LEFT OUTER JOIN
    dbo.SalesData ON Part = Part
WHERE
    SalesDate > '2011-12-31'
GROUP BY
    Part
ORDER BY
    Part

我做错了什么?

【问题讨论】:

  • 除非零件只在一个表中,否则它是不明确的。如果部分仅在一个表中,则该连接是交叉连接。
  • 我明白这一点。我只是简化代码以了解问题所在。
  • 无效语法无法“听到”问题

标签: tsql sql-server-2012-express


【解决方案1】:

我相信这是因为您的 WHERE 子句正在删除所有没有销售的部分,因为它们没有销售日期。

试试:-

SELECT
    Part,
    Sum(Sales)
FROM
    dbo.Parts
    LEFT OUTER JOIN
    dbo.SalesData ON Part = Part
    AND SalesDate > '2011-12-31'
GROUP BY
    Part
ORDER BY
    Part

【讨论】:

  • 他说得对:你可以使用AND COALESCE(salesdate, CURRENT_TIMESTAMP) > '2011-12-31',这样输出就会显示目录中每个零件的销量,不管有没有实际销量。
  • 是的。主要问题是 WHERE 条件。我没有提供确切的表字段名称,因为我不想泄露任何东西,以防我的公司生我的气。
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多