我有以下查询:
SELECT id,
concat_ws(', ',
case when isBlue then 'Blue' end,
case when isMale then 'Male' end,
case when isAdult then 'Adult' end) as Person1,
concat_ws(', ',
case when isBrown then 'Brown' end,
case when isFemale then 'Female' end,
case when isAdult then 'Adult' end) as Person2
from misc_table
where id <> NULL
order by id
这将输出以下内容
| id | Person1 | Person2
----------------------------------------------
| 1 | Blue, Male, Adult | Brown, Female, Adult
----------------------------------------------
| 2 | Blue, Male, Adult | Brown, Female, Adult
但是,我宁愿让它显示为:
| id | Person1 | Person2
----------------------------------------------
| 1 | Blue, | Brown,
| | Male, | Female,
| | Adult | Adult
----------------------------------------------
| 2 | Blue, | Brown,
| | Male, | Female,
| | Adult | Adult
似乎无法找到一种简单的方法来实现这一目标。任何建议表示赞赏!
最佳答案
如果使用来自 fine manual 的 E''
字符串,则可以在字符串文字中使用一些 C 样式的转义:
所以你可以说:
SELECT id,
concat_ws(E',\n', ...
-- -------^^^^^^
不过,这将在
+
输出中为您提供一些 psql
标志:| id | Person1 | Person2
----------------------------------------------
| 1 | Blue, +| Brown, +
| | Male, +| Female, +
| | Adult | Adult
...
但这只是
psql
告诉您有一个多行列值。顺便说一句,
id <> null
并没有像你想象的那样做,你几乎肯定想说 id is not null
以获得合理的结果。关于sql - 直接在列中添加换行符或回车符到 Postgres 中的分隔符值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27931516/