【发布时间】:2020-06-24 01:52:19
【问题描述】:
我正在尝试将行的某些部分转换为列。据我所知,我只能使用带有聚合函数的枢轴,但我只会旋转文本。对于每个客户端,我最多有 4 行按 DLSEQUENCE 字段分组。我希望所有内容都在 1 行上,而不是 4 行。
SELECT CASE
WHEN Sched_time BETWEEN TRUNC(SCHED_TIME) + INTERVAL '8' HOUR + INTERVAL '30' MINUTE
AND TRUNC(SCHED_TIME) + INTERVAL '14' HOUR + INTERVAL '45' MINUTE AND
TO_CHAR(SCHED_TIME, 'DY') IN ('MON', 'TUE', 'WED', 'THU', 'FRI')
THEN 'ABC'
ELSE 'DEF'
END AS Organization,
Client_Last_Name,
Client_First_Name,
Sched_Time,
Field_Name,
CASE
WHEN Recoded_Response = '1' THEN 'Yes'
WHEN Recoded_Response = '2' THEN 'No'
ELSE Recoded_Response
END AS Responses,
Dlsequence
FROM DAILY_LOG_CUSTOM_DATA
WHERE SERVICE_NAME = 'Medical'
AND FIELD_CATEGORY = 'Background Information'
AND Field_Name IN
(
'Restraint?',
'History',
'Findings',
'Treatment'
)
AND Sched_Time >= TO_DATE('2020-03-01 01:00:00', 'YYYY/MM/DD HH:MI:SS')
AND Sched_Time < TO_DATE('2020-03-31 12:59:00', 'YYYY/MM/DD HH:MI:SS')
Order BY Dlsequence
这是我的桌子:
我希望与 ('Restraint?','History','Findings','Treatment') 一起使用的响应字段为每个 DLSEQUENCE 字段都有自己的列。
【问题讨论】:
-
透视或条件聚合需要聚合函数。您可以将 max() 或 min() 用于文本。如果您有两行相同的 dlsequence 和 History 怎么办?例如,您可以使用 listagg()。或者您可以首先使用 row_number() 将它们显示在两个单独的行中。一切都取决于这种情况是否可能以及在这种情况下您想要什么。
-
请不要发布代码或数据的图像 - 而是将它们都以格式化文本的形式发布。这允许人们复制文本并根据需要对其进行操作,以帮助复制您的问题并找到问题的答案。另外,请附上您期望的结果示例,使用您的测试数据得出结果,以便人们可以看到您想要获得的结果。谢谢。
-
@BobJarvis-ReinstateMonica - 我正在努力为您提供格式化文本。