我能够在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
到父表,然后使用CASE
或COALESCE
在父值和子值之间进行选择。
对于像
这样的数据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.
希望这能让你走上正确的轨道。我承认我发现你的例子有点难理解,所以如果你需要更多的信息,请提供一些样本数据和你需要的结果。