我有以下查询:

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 manualE'' 字符串,则可以在字符串文字中使用一些 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/

10-11 15:09