在数据集中使用Case语句和嵌套SELECT,然后填充参数下拉SSRS



我能够在SSRS中填充参数下拉列表,该参数下拉列表从数据集中获取活动列表。虽然我的问题是在数据中有一个activitylabel字段,仅包含在影响表中,当任何活动具有"版本"的标签值时,我想要一个case语句将其替换为父活动的名称,而不是默认的子活动名称。连接数据的字段是activity_pk和activityfk,获得正确父字段的字段是prnacttfk。下面是一个数据示例,我希望将2个Test Course行与下拉框中查询中使用的DISTINCT合并为一个。

Example Data: (Name - Label) 
CourseA-Course (Not Versional so leave alone) 
Test Course-Versional  (Parent is Test Course Parent) 
Test Course (1.1)-Versional (Parent is Test Course Parent) 
CourseB-Document (Not Versional so leave alone)

在SQL中不使用dimact1的查询。ActivityLabel = ' version:

SELECT DISTINCT act1.activityname
FROM  act1
INNER JOIN dimact1 on dimact1.ActivityFK = act1.Activity_PK
WHERE 
CASE 
        WHEN dimact1.ActivityLabel = 'Versional' 
        AND EXISTS (
            SELECT dimact2.PrntActFK
                FROM dimact2
        WHERE dimact2.activitylabel = 'Versional'
        AND dimact2.PrntActFK = act1.Activity_PK
    ) THEN 1
END = 1
ORDER BY act1.activityname ASC

通常在这种情况下,LEFT JOIN到父表,然后使用CASECOALESCE在父值和子值之间进行选择。

对于像

这样的数据
create table Courses
(
  ID int
  , name varchar(100)
  , label varchar(100)
  , parentID int
)
insert into Courses
values
(1,'Test Course Parent','Test Course Parent',null)
, (2,'CourseA','Course',null)
, (3,'CourseB','Document',null)
, (4,'Test Course','Versional',1)
, (5,'Test Course (1.1)','Versional',1)

你可以使用这样的查询:

select distinct case when c.Label = 'Versional' then p.name
  else c.name
  end as name
from Courses c
  left join Courses p on c.parentID = p.ID
SQL Fiddle with demo.

希望这能让你走上正确的轨道。我承认我发现你的例子有点难理解,所以如果你需要更多的信息,请提供一些样本数据和你需要的结果。

相关内容

最新更新