在 Oracle 中使用数据透视表而不使用聚合函数
Use pivot with out using agregate function in Oracle
我的 table:
中有这个样本日期
secq dt WORK_WEEK
----------------------------------
101 2021-01-04 12:00:00 2101
102 2021-01-05 12:00:00 2101
103 2021-01-06 12:00:00 2101
104 2021-01-07 12:00:00 2101
105 2021-01-08 12:00:00 2101
106 2021-01-09 12:00:00 2101
107 2021-01-10 12:00:00 2101
108 2021-01-11 12:00:00 2102
109 2021-01-12 12:00:00 2102
110 2021-01-13 12:00:00 2102
111 2021-01-14 12:00:00 2102
112 2021-01-15 12:00:00 2102
113 2021-01-16 12:00:00 2102
114 2021-01-17 12:00:00 2102
115 2021-01-18 12:00:00 2103
116 2021-01-19 12:00:00 2103
117 2021-01-20 12:00:00 2103
118 2021-01-21 12:00:00 2103
119 2021-01-22 12:00:00 2103
120 2021-01-23 12:00:00 2103
121 2021-01-24 12:00:00 2103
122 2021-01-25 12:00:00 2104
123 2021-01-26 12:00:00 2104
124 2021-01-27 12:00:00 2104
125 2021-01-28 12:00:00 2104
126 2021-01-29 12:00:00 2104
127 2021-01-30 12:00:00 2104
128 2021-01-31 12:00:00 2104
129 2021-02-01 12:00:00 2105
130 2021-02-02 12:00:00 2105
131 2021-02-03 12:00:00 2105
132 2021-02-04 12:00:00 2105
133 2021-02-05 12:00:00 2105
134 2021-02-06 12:00:00 2105
135 2021-02-07 12:00:00 2105
我只想在每个工作周显示所有日期我无法生成输出
应该是这样的:
这是我尝试过的方法:
SELECT *
FROM
(SELECT DT, WORK_WEEK
FROM RP_CALENDAR
WHERE YEAR = '2021')
PIVOT
(MAX(dt)
FOR WORK_WEEK IN ('2101', '2102', '2103', '2105')
)
但是因为有聚合函数所以显示最大值
您可以添加 ROW_NUMBER()
分析函数以便按
等分组
SELECT "2101","2102","2103","2104","2105"
FROM(
SELECT TO_CHAR(dt,'dd') AS dt, work_week,
ROW_NUMBER() OVER (PARTITION BY work_week ORDER BY dt)
FROM rp_calender
WHERE TO_CHAR(dt,'yyyy') = '2021'
)
PIVOT ( MAX(dt) FOR work_week IN (2101,2102,2103,2104,2105) )
我的 table:
中有这个样本日期secq dt WORK_WEEK
----------------------------------
101 2021-01-04 12:00:00 2101
102 2021-01-05 12:00:00 2101
103 2021-01-06 12:00:00 2101
104 2021-01-07 12:00:00 2101
105 2021-01-08 12:00:00 2101
106 2021-01-09 12:00:00 2101
107 2021-01-10 12:00:00 2101
108 2021-01-11 12:00:00 2102
109 2021-01-12 12:00:00 2102
110 2021-01-13 12:00:00 2102
111 2021-01-14 12:00:00 2102
112 2021-01-15 12:00:00 2102
113 2021-01-16 12:00:00 2102
114 2021-01-17 12:00:00 2102
115 2021-01-18 12:00:00 2103
116 2021-01-19 12:00:00 2103
117 2021-01-20 12:00:00 2103
118 2021-01-21 12:00:00 2103
119 2021-01-22 12:00:00 2103
120 2021-01-23 12:00:00 2103
121 2021-01-24 12:00:00 2103
122 2021-01-25 12:00:00 2104
123 2021-01-26 12:00:00 2104
124 2021-01-27 12:00:00 2104
125 2021-01-28 12:00:00 2104
126 2021-01-29 12:00:00 2104
127 2021-01-30 12:00:00 2104
128 2021-01-31 12:00:00 2104
129 2021-02-01 12:00:00 2105
130 2021-02-02 12:00:00 2105
131 2021-02-03 12:00:00 2105
132 2021-02-04 12:00:00 2105
133 2021-02-05 12:00:00 2105
134 2021-02-06 12:00:00 2105
135 2021-02-07 12:00:00 2105
我只想在每个工作周显示所有日期我无法生成输出
应该是这样的:
这是我尝试过的方法:
SELECT *
FROM
(SELECT DT, WORK_WEEK
FROM RP_CALENDAR
WHERE YEAR = '2021')
PIVOT
(MAX(dt)
FOR WORK_WEEK IN ('2101', '2102', '2103', '2105')
)
但是因为有聚合函数所以显示最大值
您可以添加 ROW_NUMBER()
分析函数以便按
SELECT "2101","2102","2103","2104","2105"
FROM(
SELECT TO_CHAR(dt,'dd') AS dt, work_week,
ROW_NUMBER() OVER (PARTITION BY work_week ORDER BY dt)
FROM rp_calender
WHERE TO_CHAR(dt,'yyyy') = '2021'
)
PIVOT ( MAX(dt) FOR work_week IN (2101,2102,2103,2104,2105) )