【问题标题】:return a value if null or not null. tsql如果为 null 或不为 null,则返回一个值。 sql
【发布时间】: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 种类型,则报告显示为完美运行。

标签: sql tsql


【解决方案1】:

试试这个:

OUTER APPLY (select sum(Quantity) as FQty from unitType where Type = 'F' group by type) TF
OUTER APPLY (select sum(Quantity) as WQty from unitType where Type = 'W' group by type) TW 
OUTER APPLY (select sum(Quantity) as RQty from unitType where Type = 'R' group by type) TR 
OUTER APPLY (select sum(Quantity) as HQty from unitType where Type = 'H' group by type) TH 

由于您使用了 CROSS JOIN,您得到了 0 行。行数为...* number of row of TF * number of row of TW *...,想象一个产品,其中一个数字为0,则结果为0。

【讨论】:

  • 立即在 VS2015 中的“OUTER”附近给我一个语法错误。
  • VS 2015?你为什么不先独立测试你的查询。
  • 这是我被赋予使用的工具。
【解决方案2】:

尝试以下情况: SELECT SUM(QUANTITY) AS FQTY FROM (SELECT CASE WHEN QUANTITY IS NULL THEN 0 ELSE QUANTITY END QUANTITY FROM....)

【讨论】:

  • 如果有为语句返回的行,这将非常有效。但在其中一种没有行的类型上使用时不返回任何内容。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2021-04-10
  • 2012-08-19
  • 2018-04-13
相关资源
最近更新 更多