【发布时间】:2021-01-29 00:47:02
【问题描述】:
到目前为止,我有一个表格的 CASE 陈述
CASE
WHEN exists (SELECT * FROM subtable WHERE subtable.column1value = 's100')
THEN 'exists in column 1'
WHEN exists (SELECT * FROM subtable2 WHERE subtable2.column2value = 's100')
THEN 'exists in column 2'
ELSE ''
END
换句话说,我有一个可以存在于不同位置的合同产品组件,因此我必须搜索这些表和列,并且我希望每个合同都有一个列来指定该合同是否具有那种产品任何地方的组件。
现在我想更改它以跟踪每个合同有多少组件并保存此值作为结果,例如
CASE
WHEN exists (SELECT COUNT(*) FROM subtable WHERE subtable.column1value = 's100')
THEN COUNT(*)
WHEN exists (SELECT COUNT(*) FROM subtable2 WHERE subtable2.column2value = 's100')
THEN COUNT(*)
ELSE 0
END
但这显然行不通。有没有办法改写这个,以便我可以为每个子查询的计数结果设置一个别名,或者有更好的方法吗?也许只有多个子查询,我在其中选择结果计数,然后选择另一列作为这些列的总和?
(SELECT COUNT(*) FROM subtable WHERE subtable.column1value = 's100') AS result_column1,
(SELECT COUNT(*) FROM subtable2 WHERE subtable2.column2value = 's100') AS result_column2,
(result_column1 + result_column2) AS sum_of_results
这样可以完成工作,但听起来不是很有说服力。
【问题讨论】:
标签: sql postgresql count subquery case