如何根据具有不同值IN SQL的参数从2 cte的并集中获得结果

时间:2018-04-20 01:39:26

标签: sql sql-server parameters union common-table-expression

我必须构建一个报告,用户希望在SSRS中查看来自2个不同来源的合并数据。该报告有一些参数。 这些参数集对于两个数据源都是通用的。 我有2个数据源A和B.我写了2个cte&s;然后在这两个cte之间建立了一个联合。我的问题是,是否有一种方法可以根据两个来源中不同的各个参数值​​从两个组合中获取组合数据。更具体地说,例如我有3个参数@ id,@ name和@country。 无法加入bcz数据在两个来源中都是不同的。 来源A和B都有id,name,class,sales,country

代码

Create  Procedure [sp_1]
@id varchar(50),
@name varchar(max),
@country varchar(500)
As begin
;with cte1
As (select  * from A)

,cte2
As ( select * from B)

,ReportingData 
As(select * from A union select * from B)

select * from ReportingData

----这是代码结构--- sp创建成功。 来源A数据

id , name , class, sales, country
1A     Sid     02     45    USA
2A    Amri     03     56     USA

来源B数据

id , name , class, sales, country
1     Larry    02     45    USA
2     Amri    04    100    Aus

我想知道的是,如果我通过

@id = 1A
@name = Amri
@Country = USA 

到我的sp我会得到属于Amri的综合结果吗?

即。期望的输出

id, name, class, sales, country
2A  Amri   03      56      USA
2   Amri    04     100     Aus

技术上可行吗?

有解决方法吗?

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

假设您不关心其他参数,除了where子句外,您有大部分代码

Create  Procedure [sp_1]
@id varchar(50),
@name varchar(max),
@country varchar(500)
As begin
;with cte1
As (select  * from A)

,cte2
As ( select * from B)

,ReportingData 
As(select * from A union select * from B)



   select
     ReportingData.* 
       from ReportingData
         where ReportingData.Name = @name

所以现在如果你通过了Amri'作为您的名称参数值..存储过程将返回所需的结果(如您的预期结果)

如果您需要对其他参数进行进一步过滤,那么您只需添加and @id = id等'。,