我有以下SQL语句:
SELECT sk.kontonummer as Sachkonto,
CASE WHEN COUNT(*) > 2 ktr.kostentraeger_nr + '
and more'
ELSE ktr.kostentraeger_nr END,
(...)
结果,我可以获得2行或更多行。
当我得到3行或更多行时,我想在"ktr.kostentraeger_nr"
'以及更多'之后写入。 (作为字符串),如果不是,那么只有结果本身。
由于count函数,查询本身不可执行 - 粗体文本只是我认为它应该如何工作的想法。 有没有办法满足我的要求?
非常感谢你,因为这个问题,我已经浪费了一整天......
答案 0 :(得分:1)
您只需使用OVER()
即可。不知道您的查询或数据库结构,但这是一个应该有用的简单示例。
让我们有一个测试表
id | integer_value | text_value
---+---------------+------------
1 | 5 | a
2 | 7 | b
3 | 8 | c
4 | 1 | d
要获得实际查询的COUNT
,我们使用窗口函数OVER()
。
SELECT id,integer_value
CASE
-- since you have to add text, the integer must be cast as text.
WHEN COUNT(*) OVER () > 2 THEN integer_value::text||' and more'
ELSE integer_value::text
END AS altered_integer,
text_value
-- To test you can change the condition. When lower than 3, it shows just the value,
-- if you change the query and set lower than 4, the column will have 'and more'.
FROM instituciones WHERE id<3
--FROM instituciones WHERE id<4
查询结果当id&lt; 3:
id | integer_value | altered_integer | text_value
---+---------------+-----------------+------------
1 | 5 | 5 | a
2 | 7 | 7 | b
查询结果当id&lt; 4:
id | integer_value | altered_integer | text_value
---+---------------+-----------------+------------
1 | 5 | 5 and more | a
2 | 7 | 7 and more | b
3 | 8 | 8 and more | c
使用OVER()
时,您对COUNT
函数说它必须计算整个查询行。
注意:如果查询没有任何条件,OVER()
将返回整个表的计数