我有一份SSRS地理报告,可以选择每条记录可以选择多个地理区域的项目记录。我有参数来请求地区,选区和城市。这些工作正常,只是在选择一个城市时,所有记录显示即使选择了其他城市也会选择该城市。
我需要一个SQL查询来说,如果项目选择了@city,那么只显示仅选择@city的项目......
例如,我在下面的报告中,我选择了区域和Cranbrook的选区,然后在城市参数中,可用的列表是Cranbrook和Rockyview(太棒了!)。
在图1中,我选择了Cranbrook和Rockyview。这显示了3个项目,2个项目同时标记了cranbrook和rockyview,1个项目仅选择了Cranbrook。完美!
图1
现在,在图2中,我选择了Cranbrook的地区和选区,然后我只选择了Cranbrook市。所有3个项目仍然出现,但我明显只想要与Cranbrook标记的项目。
所以在图2中,我应该看到只有项目#3426出现在我的列表中。但他们都显示..
图2
我的数据集查询:
SELECT Filteredcbt_geographicarea.cbt_electoralareaidname
, Filteredcbt_geographicarea.cbt_name AS City
, Filteredcbt_project.cbt_imsnumber
, Filteredcbt_geographicarea.cbt_electoralidname
, Filteredcbt_projectfiscalyear.cbt_committedamount
, Filteredcbt_projectfiscalyear.cbt_commitmentavailable
, Filteredcbt_projectfiscalyear.cbt_commitmentdisbursed
, Filteredcbt_project.cbt_organizationlegalnameidname
, Filteredcbt_project.statuscodename
, Filteredcbt_projectfiscalyear.cbt_projectnameid
, Filteredcbt_projectfiscalyear.cbt_programfiscalyearidname
, Filteredcbt_projectfiscalyear.cbt_fiscalyearidname
, Filteredcbt_regionaldistrict.cbt_name AS [Regional District]
FROM Filteredcbt_regionaldistrict
INNER JOIN Filteredcbt_electoralarea ON Filteredcbt_regionaldistrict.cbt_regionaldistrictid = Filteredcbt_electoralarea.cbt_regionaldistrictid
INNER JOIN Filteredcbt_category
INNER JOIN Filteredcbt_program ON Filteredcbt_category.cbt_categoryid = Filteredcbt_program.cbt_categoryid
INNER JOIN Filteredcbt_project ON Filteredcbt_program.cbt_programid = Filteredcbt_project.cbt_programnameid
INNER JOIN Filteredcbt_projectfiscalyear ON Filteredcbt_project.cbt_projectid = Filteredcbt_projectfiscalyear.cbt_projectnameid
INNER JOIN Filteredcbt_cbt_project_cbt_geographicarea ON Filteredcbt_project.cbt_projectid = Filteredcbt_cbt_project_cbt_geographicarea.cbt_projectid
INNER JOIN Filteredcbt_geographicarea ON Filteredcbt_cbt_project_cbt_geographicarea.cbt_geographicareaid = Filteredcbt_geographicarea.cbt_geographicareaid
ON Filteredcbt_electoralarea.cbt_electoralareaid = Filteredcbt_geographicarea.cbt_electoralareaid
WHERE (Filteredcbt_geographicarea.cbt_electoralareaidname IN (@Area)) AND (Filteredcbt_project.statuscodename IN (@Status)) AND
(Filteredcbt_projectfiscalyear.cbt_fiscalyearidname IN (@FiscalYear)) AND (Filteredcbt_regionaldistrict.cbt_name IN (@Regional)) AND
(Filteredcbt_geographicarea.cbt_name IN (@City))
ORDER BY Filteredcbt_projectfiscalyear.cbt_fiscalyearidname
ORDER BY Filteredcbt_projectfiscalyear.cbt_fiscalyearidname;
因此,表结构如下所示:
Filteredcbt_project 包含所有项目相关信息,PK为cbt_projectid
Filteredcbt_geographicarea 包含所有地理区域ID和城市信息
Filteredcbt_cbt_cbt_project_cbt_geographicarea 是项目和地理区域之间的交叉表。这包含标记为每个项目ID的城市。
Filteredcbt_project通过 cbt_projectid 链接到Filteredcbt_cbt_cbt_project_cbt_geographicarea。
Filteredcbt_geographicarea表通过 cbt_geographicareaid
链接到Filteredcbt_cbt_cbt_project_cbt_geographicarea样品:
Filteredcbt_cbt_project_cbt_geographicarea示例:此示例显示一个项目ID可以标记多个地理区域
cbt_cbt_project_cbt_geographicareaid cbt_geographicareaid cbt_projectid
A6D7292F-EA05-E411-BCEA-00155D0470B9 4EB4F611-4BD1 2C2FC521-EA05-E411
998F9FE5-2806-E411-BCEA-00155D0470B9 38B4F611-4BD1 54FD66DD-2806-E411
9A8F9FE5-2806-E411-BCEA-00155D0470B9 7EB4F611-4BD1 54FD66DD-2806-E411
(same project ID's on the last two)
Filteredcbt_geographicarea示例:这些是地理区域。
cbt_electoralareaid cbt_electoralareaidname cbt_geographicareaid cbt_name(city)
16B4F611-4BD1-E311-8AB9 Town of Creston 2EB4F611-4BD1-E311 Alice Siding
13B4F611-4BD1-E311-8AB9 RDCK Area I 2FB4F611-4BD1-E311 Thrums
0EB4F611-4BD1-E311-8AB9 RDCK Area D 30B4F611-4BD1-E311 Ainsworth
Filteredcbt_project示例:
cbt_imsnumber cbt_programnameid cbt_projectid
3397 F38AEF17-4BD1-E311-8AB9-00155D067193 48F7E223-4BD1-E311-8AB9-00155D067193
3398 F58AEF17-4BD1-E311-8AB9-00155D067193 4AF7E223-4BD1-E311-8AB9-00155D067193
3426 D18AEF17-4BD1-E311-8AB9-00155D067193 44F7E223-4BD1-E311-8AB9-00155D067193
我希望这有帮助,我真的需要得到一些答案......我感谢所有的帮助!