【发布时间】:2016-12-13 19:42:14
【问题描述】:
我最近使用此 SQL 语句的变体编写了一份报告:
select project.*, TF.*, TW.*, TR.*, TH.* from
(select sum(Quantity) as FQty from unitType where Type = 'F' group by type) TF,
(select sum(Quantity) as WQty from unitType where Type = 'W' group by type) TW,
(select sum(Quantity) as RQty from unitType where Type = 'R' group by type) TR,
(select sum(Quantity) as HQty from unitType where Type = 'H' group by type) TH
问题是,如果一个项目没有单元类型,那么该单元类型的 sql 语句不返回任何内容,这会使我的整个语句不返回任何内容。我一直在试图弄清楚如何让它在 null 时返回 0,但似乎没有什么对我有用。我尝试过 Case,但它告诉我一些关于“isnull 是无效的列名”的信息,我也尝试过“如果存在”,但这只会引发语法错误。
有什么建议吗?
【问题讨论】:
-
我有一个项目,所有 4 种类型的 sql 都可以完美运行。但如果缺少 1 种类型,则项目的整个报告返回 null。
-
您的
FROM子句中的project表/别名在哪里? -
这是一个严重精简的声明。我想我可以将其缩减为仅选择之一。
-
在您的问题中有
FROM unitType,它看起来像一个表的名称。但是在下面您要说明如果项目没有单元类型,它看起来更像是列名...请提供有关您的表结构的详细信息。一般来说:源列表 (... FROM tblA,tblB,tblC) 是CROSS JOIN的过时语法,结果应为 each-with-each(笛卡尔积)。我真的怀疑,这就是你需要的...... -
我们在一个项目上工作,unitType 表包含该项目每个特定单元的一行。并非所有项目都有每种类型的单元。因此,如果项目缺少 F 类型,它会返回 0 行,这反过来会导致 sql 语句返回 0 行,这会导致 SQL 支持的报告中的所有字段都返回空值。如果一个项目具有所有 4 种类型,则报告显示为完美运行。