SQL Oracle-将行转换为列
我的SQL输出当前生成以下内容: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
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,而不是我必须填充它@胡安卡洛索罗佩酒店