Jer*_*emy 1 sql oracle pivot dynamic-sql
我有这样一张桌子:
TABLE: FACTS
ID KEY VALUE
1 name Jeremy
1 height 5'11
1 awesomeness 10
2 name Mark
2 awesomeness 4
3 height 4'6
Run Code Online (Sandbox Code Playgroud)
因此,(ID,KEY)元组可以被视为主键.
我试图返回这样的行:
ID NAME HEIGHT AWESOMENESS
1 Jeremy 5'11 10
2 Mark (null) 4
3 (null) 4'6 (null)
Run Code Online (Sandbox Code Playgroud)
除了通过对每列进行子选择之外,如何获取键值,如果它们在那里,并将它们收集到我的单行中?我到目前为止尝试的是:
SELECT
id,
CASE WHEN facts.key = 'name' THEN value END name,
CASE WHEN facts.key = 'height' THEN value END height,
CASE when facts.key = 'awesomeness' THEN value END awesomeness
FROM
facts
WHERE
facts.id in (1,2,3)
Run Code Online (Sandbox Code Playgroud)
但是由于显而易见的原因,每个匹配的键返回一行,而不是每个id一行.
我怎样才能按照我想要的方式去做?
谢谢!
您可以在任何版本的Oracle中透视这样的数据.
SELECT id,
MAX( CASE WHEN key = 'name' THEN value ELSE null END ) name,
MAX( CASE WHEN key = 'height' THEN value ELSE null END ) height,
MAX( CASE WHEN key = 'awesomeness' THEN value ELSE null END ) awesomeness
FROM facts
WHERE id IN (1,2,3)
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
如果你使用11g,你也可以使用PVOT运营商.
但是,如果这代表了您的数据模型,那么这种实体属性数据模型通常会效率很低.你一般会好得多与列了一个表送达name,height,awesomeness,等.
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |