SQL Oracle-将行转换为列

SQL Oracle-将行转换为列,sql,oracle,Sql,Oracle,我的SQL输出当前生成以下内容: DEPARTMENT | MM-YYYY | ROW_LABEL | SCORE A 05-2018 STAFF 79.0 A 06-2018 STAFF 81.0 A 05-2018 SCHED 72.3 A 06-2018 SCHED 74.5 B 05-2018 STAFF

我的SQL输出当前生成以下内容:

DEPARTMENT | MM-YYYY | ROW_LABEL | SCORE
   A         05-2018    STAFF      79.0
   A         06-2018    STAFF      81.0
   A         05-2018    SCHED      72.3
   A         06-2018    SCHED      74.5
   B         05-2018    STAFF      77.4
   B         06-2018    STAFF      74.3
   B         05-2018    SCHED      81.3
   B         06-2018    SCHED      78.6
我的目标是自动将行中的日期值转换为它自己的列。大概是这样的:

DEPARTMENT | ROW_LABEL | 05-2018 | 06-2018
   A           STAFF      79.0      81.0
   A           SCHED      72.3      74.5
   B           STAFF      77.4      74.3
   B           SCHED      81.3      78.6 
此报告将每月更改一次,因此目标是自动填充MM-YYYY+分数。下次我运行此报告时,它将是2018年6月和2018年7月,我不想每次生成此报告时都硬编码日期。

您可以这样尝试:

DEPARTMENT | ROW_LABEL | 05-2018 | 06-2018
   A           STAFF      79.0      81.0
   A           SCHED      72.3      74.5
   B           STAFF      77.4      74.3
   B           SCHED      81.3      78.6 
SQL演示版

SELECT 
     "DEPARTMENT", "ROW_LABEL" ,
     MAX(CASE WHEN "MMYYYY" = (select TO_CHAR(ADD_MONTHS(sysdate,-1), 'MM-YYYY') from dual)
              THEN "SCORE"
         END) as previous_month,
     MAX(CASE WHEN "MMYYYY" = (select TO_CHAR(sysdate, 'MM-YYYY') from dual)
              THEN "SCORE"
         END) as current_month           
FROM Table1
GROUP BY "DEPARTMENT", "ROW_LABEL" 
ORDER BY "DEPARTMENT", "ROW_LABEL" DESC;
输出

| DEPARTMENT | ROW_LABEL | PREVIOUS_MONTH | CURRENT_MONTH |
|------------|-----------|----------------|---------------|
|          A |     STAFF |             79 |            81 |
|          A |     SCHED |           72.3 |          74.5 |
|          B |     STAFF |           77.4 |          74.3 |
|          B |     SCHED |           81.3 |          78.6 |

如果您希望在标题上显示确切日期,则需要搜索“Oracle PIVOT”,谢谢您的编辑。我试图找出如何在SO中生成类似于表的输出。我来看看这个支点。我以前的谷歌搜索给了我一些选择,但迫使我专门填充我的MM-YYYY列,而不是选择已经存在的MM-YYYY列。这段SQL代码让我得到了今天想要的…PIVOT(SUM(SCORE)作为S,IN('05-2018'作为A,'06-2018'作为B));但是,我如何在部分中实现自动化,以便它自动选择MM-YYYY,而不是我必须填充它@胡安卡洛索罗佩酒店