将一列的结果集转换为oracle

时间:2019-01-29 09:56:59

标签: sql oracle

如何将一列的结果集划分为多列

假设我在“四分之一”和“任期”一列中的值与表“样本”相同,如下所示

Quarter|Tenure
Q1     |3
Q2     |3
Q3     |2
Q4     |1

任期是雇员每季度服务的月数。

现在,我希望结果集是应在四个不同的列中每季度获取的四个不同的任期。意思是应该在4个不同的列中显示哪个季度的任期是多少。

例如

Q1_A| Q2_A |Q3_A |Q4_A
3   | 3    |2    |1

2 个答案:

答案 0 :(得分:0)

您可以使用DECODE:

SELECT SUM(DECODE(quarter,'Q1',tenure,0)) Q1_A,
SUM(DECODE(quarter,'Q2',tenure,0)) Q2_A,
SUM(DECODE(quarter,'Q3',tenure,0)) Q3_A,
SUM(DECODE(quarter,'Q4',tenure,0)) Q4_A
FROM Sample;

答案 1 :(得分:0)

使用PIVOT

Oracle设置

CREATE TABLE table_name ( Quarter, Tenure ) AS
  SELECT 'Q1', 3 FROM DUAL UNION ALL
  SELECT 'Q2', 3 FROM DUAL UNION ALL
  SELECT 'Q3', 2 FROM DUAL UNION ALL
  SELECT 'Q4', 1 FROM DUAL;

查询

SELECT *
FROM   table_name
PIVOT  ( MAX( Tenure ) FOR Quarter IN (
    'Q1' AS Q1_A,
    'Q2' AS Q2_A,
    'Q3' AS Q3_A,
    'Q4' AS Q4_A
) )

输出

Q1_A | Q2_A | Q3_A | Q4_A
---: | ---: | ---: | ---:
   3 |    3 |    2 |    1

db <>提琴here