我 有 这样 的 疑问 :
select pivot_table.*
from (
Select STATUS,USER_TYPE
FROM TRANSACTIONS tr
join TRANSACTION_STATUS_CODES sc on sc.id = tr.user_type
join TRANSACTION_USER_TYPES ut on ut.id=tr.user_type
WHERE Tr.User_Type between 1 and 5
And tr.status!=1
AND Tr.Update_Date BETWEEN TO_DATE('2022-01-01 00:00:00', 'yyyy-mm-dd HH24:MI:SS')
AND TO_DATE('2022-11-13 23:59:59', 'yyyy-mm-dd HH24:MI:SS')
) t
pivot(
count(user_type)
FOR user_type IN (1,2,3,5)
) pivot_table;
中 的 每 一 个
其 给出 :
| 状态|一 个|2 个|三 个|五 个|
| - -| - -| - -| - -| - -|
| 2 个|三 个|第 0 页|第 0 页|第 0 页|
| 四 个|十三|第 0 页|第 0 页|第 0 页|
| 五 个|一 个|第 0 页|第 0 页|第 0 页|
| 三 个|五 个|第 0 页|第 0 页|一 个|
| 第 0 页|四 个|第 0 页|第 0 页|八 个|
想要 的 结果 :
| 状态|一 个|2 个|三 个|五 个|总计|
| - -| - -| - -| - -| - -| - -|
| 2 个|三 个|第 0 页|第 0 页|第 0 页|三 个|
| 四 个|十三|第 0 页|第 0 页|第 0 页|十三|
| 五 个|一 个|第 0 页|第 0 页|第 0 页|一 个|
| 三 个|五 个|第 0 页|第 0 页|一 个|六 个|
| 第 0 页|四 个|第 0 页|第 0 页|八 个|十二|
| 状态 2 、 4 、 5 的 总和|十七 岁|第 0 页|第 0 页|第 0 页|十七 岁|
| 所有 状态 的 总和|二十六 人|第 0 页|第 0 页|第 0 页|三十五|
我 试 着 补充 一 句 :
Select STATUS,USER_TYPE,
count(user_type) as records,
sum(user_type) over (partition by status) as total
格式
最 后 :
pivot ( sum (records) for user_type in (1,2,3,5)) pivot_table
格式
但 从 逻辑 上 讲 我 仍然 不在 那里 。
2条答案
按热度按时间5gfr0r5j1#
您希望在分组集上使用
GROUP BY CUBE
和条件聚集和过滤器:对于示例数据(表示多个联接表的输出):
输出:
| 状态|一个|2个|三个|五个|总计|
| - -|- -|- -|- -|- -|- -|
| 第0页|四个|第0页|第0页|八个|十二|
| 三个|五个|第0页|第0页|一个|六个|
| 2个|三个|第0页|第0页|第0页|三个|
| 四个|十三|第0页|第0页|第0页|十三|
| 五个|一个|第0页|第0页|第0页|一个|
| 小计|十七岁|第0页|第0页|第0页|十七岁|
| 总计|二十六人|第0页|第0页|九个|三十五|
您可以更改字符串文字以匹配所需输出的行标题。
fiddle
y4ekin9u2#
这样做的一个选项是使用MODEL子句,如下所示:
根据您问题中的数据:
结果应该是:
| 状态|一个|2个|三个|五个|总计|
| - -|- -|- -|- -|- -|- -|
| 2个|三个|第0页|第0页|第0页|三个|
| 四个|十三|第0页|第0页|第0页|十三|
| 五个|一个|第0页|第0页|第0页|一个|
| 三个|五个|第0页|第0页|一个|六个|
| 第0页|四个|第0页|第0页|八个|十二|
| 状态2、4、5的总和|十七岁|第0页|第0页|第0页|十七岁|
| 所有状态的总和|二十六人|第0页|第0页|九个|三十五|
此致