Łuk*_*ner 3 sql postgresql pivot
我有一张桌子
id|level|name
Run Code Online (Sandbox Code Playgroud)
等级可以是1,2或3
我想得到的是:
id|lvl1name|lvl2name|lvl3name
Run Code Online (Sandbox Code Playgroud)
我正在使用以下查询
SELECT L1."name" as lvl1name, L2."name" as lvl2name, L3."name" as
lvl3name, L1.id
FROM table as L1
JOIN table as L2 ON L1.id = L2.id
JOIN table as L3 ON L2.id = L3.id
WHERE L1.lvl='1' and L2.lvl='2' and L3.lvl='3';
Run Code Online (Sandbox Code Playgroud)
但它太慢了!
有必须是一个更好的方式来做到这一点.请帮忙
对于这个例子,我正在使用postgres,但我很乐意学习一些不依赖于数据库特性的方法.
我不能写程序(只读访问),我从视图中选择它.
使用:
SELECT t.id,
MAX(CASE WHEN t.level = 1 THEN t.name END) AS level1name,
MAX(CASE WHEN t.level = 2 THEN t.name END) AS level2name,
MAX(CASE WHEN t.level = 3 THEN t.name END) AS level3name
FROM YOUR_TABLE t
GROUP BY t.id
Run Code Online (Sandbox Code Playgroud)
如果您需要它是动态的,则需要使用动态SQL.
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |