自定义列包含多个值

时间:2019-01-26 19:38:19

标签: sql-server

这是我用于生成特定报告的查询代码。这可行,但是当我添加最后一个选择语句

(Select Name 
 from RPT_CUSTOM_LIST_VALUES 
 where CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_10) AS [Application]

RI1.Cust_10列包含多个用逗号分隔的值。如何获取它,以便查找表提取每个值并为该值提供正确的名称?我无法在该数据库中创建或修改表。

select 
    RI1.incident_id as [Project Incident #],
    (Select Name from RPT_CUSTOM_LIST_VALUES 
     where CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_02) as [Business Name],
    RI1.NAME as [Project Name],
    RI1.INCIDENT_STATUS_NAME as [Phase],
    (Select Name from RPT_CUSTOM_LIST_VALUES 
     where CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_09) as [Key Milestone Name],
    convert(nvarchar(10), RI1.CUST_26,103) as [Key Milestone Date],  -- leave as date
    convert(nvarchar(10), RI1.CUST_29,103) as [Target Completion Date], -- leave as date
    RI1.SEVERITY_NAME as [Status Color],
    RI1.CUST_01 as [Status Summary],
    RI1.OWNER_NAME as [IT Owner],
    (Select Name from RPT_CUSTOM_LIST_VALUES 
     where CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_10) AS [Application]
from 
    RPT_INCIDENTS RI1   
where 
    RI1.PROJECT_ID = 445
    and RI1.IS_DELETED = 0
    and (RI1.INCIDENT_STATUS_NAME <> '5.1-Cancelled' and RI1.INCIDENT_STATUS_NAME <> '5.2-Completed')

我的输出应该是,但是最后一列应该是名称而不是值。这些值来自“查找”表,我需要一种方法来提取这些数据,以使这些值现在成为名称。

Report Output

1 个答案:

答案 0 :(得分:0)

如果没有您的数据,我无法进行测试,但希望它对您有用:

select RI1.incident_id as [Project Incident #]
    , [Business Name] = s1.Name
    ,RI1.NAME as [Project Name] 
    ,RI1.INCIDENT_STATUS_NAME as [Phase]
    , [Key Milestone Name] = s2.Name
    ,convert(nvarchar(10), RI1.CUST_26,103) as [Key Milestone Date]  -- leave as date
    ,convert(nvarchar(10), RI1.CUST_29,103) as [Target Completion Date] -- leave as date
    ,RI1.SEVERITY_NAME as [Status Color]
    ,RI1.CUST_01 as [Status Summary]
    ,RI1.OWNER_NAME as [IT Owner]
    , [Application] = LEFT(s3.App,LEN(APP) - SIGN(LEN(s3.APP)))
From RPT_INCIDENTS AS RI1  
OUTER APPLY (Select TOP 1 i.Name from RPT_CUSTOM_LIST_VALUES as i where i.CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_02) as s1
OUTER APPLY (Select TOP 1 i.Name from RPT_CUSTOM_LIST_VALUES as i where i.CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_09) as s2
OUTER APPLY (SELECT App = (
    Select i.Name + ','
    from RPT_CUSTOM_LIST_VALUES as i 
    where i.CUSTOM_PROPERTY_VALUE_ID = RI1.CUST_10
    FOR XML PATH(''))
) as s3
where RI1.PROJECT_ID = 445
    and RI1.IS_DELETED = 0
    and (RI1.INCIDENT_STATUS_NAME <> '5.1-Cancelled' and RI1.INCIDENT_STATUS_NAME <> '5.2-Completed')