【发布时间】:2019-10-09 05:33:10
【问题描述】:
我试图在我的查询中将“总计”值拆分为两列,但这样做是通过在结果中保留一行来实现的。我目前正在使用两个不同的CASE 语句来执行此操作,但它最终会为每个结果创建两行——每行包含一个NULL。有没有办法做到这一点,只返回一行结果,总和按指定的条件分开?
例如,我有一种材料,其“空白数量”为 38 个单位,“未覆盖数量”为 8 个单位,总计 46 个。我希望在一行中看到这一点 - 但代码如下我为这种材料获得了两行 - 每种类型的数量各一行。我已经研究过PIVOT,但似乎不会奏效。
CASE
WHEN MRP.STOCK_TYPE = 'A'
THEN SUM(MRP.QUANTITY)
END AS 'Uncovered Qty',
CASE WHEN MRP.STOCK_TYPE <> 'A'
THEN SUM(MRP.QUANTITY)
END AS 'Blank Qty'
返回:
值为“未覆盖数量”= NULL 和“空白数量”= 38 的一行
一行值为 'uncovered qty = 8 和 'blank qty = NULL
有没有办法让它在一行中返回并避免NULL
【问题讨论】:
-
基于 有没有办法让它在单行中返回并避免 NULL ->
where your_column IS NOT NULL -
CASE 不是一个语句,它是一个返回标量值的表达式。如果您的起点是需要合并(可能)或过滤的 2 行(或更多 - 我们不知道),那么适当的逻辑取决于您的目标和这些行的内容。您已经在使用 SUM - 这意味着您已经在对行进行分组,因此问题很可能出在未发布的分组逻辑上。你有猜测,但猜测并不是找到解决方案的最有效方法。
标签: sql sql-server case