这是一个名为的示例表animal
:
name | color
------------
fox | brown
fox | red
dog | gold
现在,我想要的是这个结果:
fox | dog
-------------
brown | gold
red |
名称应该是结果的列,以不同的颜色值作为行。
我的第一个想法是:
SELECT color
FROM animal
WHERE name='fox'
[some sort of join?]
SELECT color
FROM animal
WHERE name='dog'
但我不知道什么样的加入会奏效。
第二个想法:
SELECT CASE WHEN name = 'fox' THEN color ELSE NULL END AS fox,
CASE WHEN name = 'dog' THEN color ELSE NULL END AS dog
FROM animal
这将返回:
fox | dog
-----------
red |
brown |
| gold
我想将此表中的空值移到最后。我尝试过了:
ORDER BY CASE name
WHEN 'fox' THEN fox
WHEN 'dog' THEN dog
END
但我不确定这是否真的是我想要的,Postgres 一直在唠叨说 fox 不是专栏,尽管我可以做到ORDER BY fox
。
也许我的方法完全是胡说八道,或者有某种合并魔法可以解决问题?