我有一个SQL查询,我正在使用CTE。在其中一个CTE中,我试图从存在大量值的列中获取3个值。 3个值中的每一个都需要返回实际值并返回每个值的新列。如果您查看CTE_SPC
,我会查看专栏ef.folder_type_name
以查找'网站','协议'国家/地区'。
数据行是根据ef.entity_folder_id
构建的。每一行都会在其他几行中包含这三个数据。
我很难搞清楚如何有效地将这三个数据与其他数据连接起来。
不确定我是否已经解释得那么好,如果需要澄清,请询问。
WITH CTE_A AS
(
SELECT
a.status AS status
, a.entity_folder_id
, a.activity_comment
, a.id
, a.activity__dt
, DENSE_RANK() OVER(PARTITION BY a.entity_folder_id ORDER BY a.activity__dt DESC) AS ActivityRank
--, ef.entity_folder_id
, ef.folder_id
FROM
activity a
JOIN
entity_folder ef ON ef.folder_id = a.entity_folder_id
WHERE
ef.deleted <> 1
), CTE_SCD AS
(
SELECT
CA.status
, CA.activity_comment
, CA.activity__dt
, CA.entity_folder_id
, CA.ActivityRank
, CA.id
, CA.folder_id
--, ef.entity_folder_id
FROM
CTE_A CA
--JOIN entity_folder ef ON CA.entity_folder_id = ef.folder_id
WHERE
CA.ActivityRank = 1
AND CA.entity_folder_id = CA.folder_id
), CTE_SPC AS
(
SELECT
--ef.entity_name
CASE
WHEN a.entity_folder_id = ef.folder_id AND ef.folder_type_name = 'Site'
THEN ef.entity_name
END AS 'Site'
--, CASE WHEN ef.folder_type_name = 'Protocol' THEN ef.entity_name END AS 'Protocol'
--, CASE WHEN ef.folder_type_name = 'MasterCountry' THEN ef.entity_name END AS 'Country'
FROM
entity_folder ef
JOIN
activity a ON a.entity_folder_id = ef.folder_id
)