TD中的PIVOT实施
PIVOT implementation in TD
我想旋转我的数据,我知道我们在 teradata 16 中有旋转功能。
我不确定如何使用它。我知道其他方法,例如 max(case...) 但我的数据集很大,所以我不能使用它。
谁能告诉我如何在这里使用 pivot:
SERV_PROVIDER_ID CALL_START_DT cnt1
50003 4/15/2018 25,117
50003 4/16/2018 65,630
50003 4/17/2018 63,880
50003 4/18/2018 40,080
想要
这样的数据
SERV_PRIDER_ID CALL_START_DT1 CNT1 CALL_START_DT2 CNT2 CALL_START_DT3 CNT3
我只查找 4 天的数据。
感谢您的帮助。
当这四个日期已知时:
SELECT *
FROM mytab
PIVOT
( Sum(cnt1)
FOR CALL_START_DT
IN (DATE'2018-04-15'
,DATE'2018-04-16'
,DATE'2018-04-17'
,DATE'2018-04-18'
)
) AS dt;
但是您的预期结果看起来像您动态地想要那些日子:
WITH cte AS
(
SELECT t.*,
Row_Number()
Over (PARTITION BY SERV_PROVIDER_ID
ORDER BY CALL_START_DT) AS rn
FROM mytab AS t
)
SELECT *
FROM cte
PIVOT
( Min(CALL_START_DT) AS CALL_START_DT,
Sum(cnt1) AS Cnt
FOR rn
IN (1
,2
,3
,4
)
) AS dt;
我想旋转我的数据,我知道我们在 teradata 16 中有旋转功能。 我不确定如何使用它。我知道其他方法,例如 max(case...) 但我的数据集很大,所以我不能使用它。
谁能告诉我如何在这里使用 pivot:
SERV_PROVIDER_ID CALL_START_DT cnt1
50003 4/15/2018 25,117
50003 4/16/2018 65,630
50003 4/17/2018 63,880
50003 4/18/2018 40,080
想要
这样的数据SERV_PRIDER_ID CALL_START_DT1 CNT1 CALL_START_DT2 CNT2 CALL_START_DT3 CNT3
我只查找 4 天的数据。
感谢您的帮助。
当这四个日期已知时:
SELECT *
FROM mytab
PIVOT
( Sum(cnt1)
FOR CALL_START_DT
IN (DATE'2018-04-15'
,DATE'2018-04-16'
,DATE'2018-04-17'
,DATE'2018-04-18'
)
) AS dt;
但是您的预期结果看起来像您动态地想要那些日子:
WITH cte AS
(
SELECT t.*,
Row_Number()
Over (PARTITION BY SERV_PROVIDER_ID
ORDER BY CALL_START_DT) AS rn
FROM mytab AS t
)
SELECT *
FROM cte
PIVOT
( Min(CALL_START_DT) AS CALL_START_DT,
Sum(cnt1) AS Cnt
FOR rn
IN (1
,2
,3
,4
)
) AS dt;