我对Oracle很新。我想从原始表中生成另一个表。这是我的原始表。
Function | Machine | Value
============================
A | M1 | VALID
A | M2 | INVALID
B | M1 | VALID
B | M2 | INVALID
C | M1 | INVALID
C | M2 | VALID
这是我想要生成的结果表。
Function | M1 | M2
============================
A | VALID | INVALID
B | VALID | INVALID
C | INVALID | VALID
这可能吗?我很感激任何建议。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您使用较低版本的oracle说10,不支持pivot功能,以下查询对您有所帮助:
with tab as
(
SELECT 'A' FUNCTION, 'M1' MACHINE, 'VALID' VALUE FROM DUAL
UNION
SELECT 'A' FUNCTION, 'M2' MACHINE, 'INVALID' VALUE FROM DUAL
UNION
SELECT 'B' FUNCTION, 'M1' MACHINE, 'VALID' VALUE FROM DUAL
UNION
SELECT 'B' FUNCTION, 'M2' MACHINE, 'INVALID' VALUE FROM DUAL
UNION
SELECT 'C' FUNCTION, 'M1' MACHINE, 'INVALID' VALUE FROM DUAL
UNION
SELECT 'C' FUNCTION, 'M2' MACHINE, 'VALID' VALUE FROM DUAL
)
SELECT FUNCTION,
max(case when MACHINE = 'M1' THEN VALUE ELSE ' ' END) M1,
max(case when MACHINE = 'M2' THEN VALUE ELSE ' ' END) M2
FROM tab
group by FUNCTION
order by FUNCTION;
答案 2 :(得分:-1)
基本上你需要转动数据,如果你使用的是Oracle 11g,你可以使用pivot函数,否则你可以使用本文中给出的Case或Decode函数Oracle Pivot
示例:
pivot
(
count(field_name)
for field_name in ('value1','value2','value3'...)
)
希望它有助于