列中的多个值用于构建数据

时间:2016-08-16 05:07:59

标签: sql sql-server

我有一个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
)

0 个答案:

没有答案