sql - 透视子句中的 Oracle 计数值
问题描述
我有下表:
ID | 抽签 | PROID | 储物柜 |
---|---|---|---|
XXXXXX | 06 | 01 | 是 |
XXXXXX | 06 | 02 | X |
XXXXXX | 06 | 02 | 小号 |
XXXXXX | 06 | 01 | R |
XXXXXX | 02 | 01 | 是 |
XXXXXX | 02 | 02 | X |
XXXXXX | 02 | 02 | 小号 |
XXXXXX | 02 | 01 | R |
XXXXXX | 02 | 01 | R |
XXXXXX | 02 | 01 | R |
XXXXXX | 02 | 01 | R |
年年年年 | 06 | 01 | 是 |
年年年年 | 06 | 02 | X |
年年年年 | 06 | 02 | 小号 |
年年年年 | 06 | 01 | R |
年年年年 | 02 | 01 | 是 |
年年年年 | 02 | 02 | X |
年年年年 | 02 | 02 | 小号 |
年年年年 | 02 | 01 | R |
如果我运行以下查询,它会给出以下内容
SELECT *
FROM
(
SELECT id,lotyp||proid As title,
LISTAGG(lockr,',') WITHIN GROUP (ORDER BY lotyp||proid) AS value
FROM t
GROUP BY id,lotyp||proid )
PIVOT (
MAX(value) FOR title IN ('0201' AS "0201",
'0202' AS "0202",
'0601' AS "0601",
'0602' AS "0602"))
ORDER BY id;
ID | 0201 | 0202 | 0601 | 0602 |
---|---|---|---|---|
XXXXXX | R,R,R,R,Y | S, X | R, Y | S, X |
年年年年 | R, Y | S, X | R, Y | S, X |
但是,我怎样才能获得以下内容?
ID | 0201 | 0202 | 0601 | 0602 |
---|---|---|---|---|
XXXXXX | 4R, Y | S, X | R, Y | S, X |
年年年年 | R, Y | S, X | R, Y | S, X |
解决方案
先数一数
SELECT *
FROM(
SELECT id, title,
LISTAGG(lockr,',') WITHIN GROUP (ORDER BY title) AS value
FROM(
SELECT id,lotyp||proid As title, case count(*) when 1 then '' else CAST(count(*) AS VARCHAR2(10)) end || LOCKR As LOCKR
FROM t
GROUP BY id,lotyp||proid, LOCKR
) t
GROUP BY id, title )
PIVOT (
MAX(value) FOR title IN ('0201' AS "0201",
'0202' AS "0202",
'0601' AS "0601",
'0602' AS "0602"))
ORDER BY id;
推荐阅读
- sql - QSqlQuery 不显示 QString 位置
- r - 使用 googleAnalyticsR,如何跟踪特定活动的会话?
- r - 试图在 R 中找到波动性,但我的代码不起作用
- javascript - 打字稿可选链接
- django - 试图通过两个字典,但只有第一个有效
- webpack - 如何从 webpack-dev-middleware / webpack-hot-middleware 引用内存包
- r - 试图为 R 中 csv 文件的每一行找到回归和 p 值
- iis - 如何在 IIS 上为 text/html 页面使用 eTag
- python - 如何在 DJANGO ORM 中编写此查询 sql
- spring-mvc - 应用程序样式在 Vue Web 组件中不起作用