Sql 带逻辑/条件的左连接

Sql 带逻辑/条件的左连接,sql,sql-server,left-join,Sql,Sql Server,Left Join,我的标题有点模棱两可,但我会尝试在下面澄清 我已经创建了一个视图(a)和几个连接。我正在尝试将该视图与另一个视图(B)连接起来。这两个视图都包含一个年份字段、公司ID、行业ID和一个值为I或U的产品代码 视图B还包含员工ID,自然每个公司ID都有多个员工ID。任何员工ID都可以有一个产品代码,即I、U或两者。如果两者都有,则会有两个相同的员工ID,由produc代码识别 现在我想加入一个关于年份、客户ID、行业ID和产品代码的视图。但是,由于视图B中的每个客户ID都可能出现两次(如果该客户的底层

我的标题有点模棱两可,但我会尝试在下面澄清

我已经创建了一个视图(a)和几个连接。我正在尝试将该视图与另一个视图(B)连接起来。这两个视图都包含一个年份字段、公司ID、行业ID和一个值为I或U的产品代码

视图B还包含员工ID,自然每个公司ID都有多个员工ID。任何员工ID都可以有一个产品代码,即I、U或两者。如果两者都有,则会有两个相同的员工ID,由produc代码识别

现在我想加入一个关于年份、客户ID、行业ID和产品代码的视图。但是,由于视图B中的每个客户ID都可能出现两次(如果该客户的底层员工同时具有产品代码I和U),因此我只想加入一次

这是产品代码的客户ID的分发:

我而不是你:165'370

U而不是I:45'27

U和I:48'920

left join [raw].[ViewA] a on a.year=b.year and a.CustomerID=b.CustomerID
and a.IndustryID=b.IndustryID and a.ProductCode ='I' 
这是我目前正在运行的加入,尽管我排除了CustomerID只有产品代码U的所有记录。我只希望每个客户ID/年/行业ID加入一次的原因是因为我稍后将从视图A中聚合一些其他值。因此,我不能让该值出现两次

当前结果

Year CustomerID IndustyID ProductCode Value
2015    A         Z           I         50
2015    A         Z           U         NULL
2015    B         Z           I         40
2016    A         Z           I         20
2016    B         Z           U         NULL
我想要什么

Year CustomerID IndustyID ProductCode Value
2015    A         Z           I         50
2015    A         Z           U         NULL
2015    B         Z           I         40
2016    A         Z           I         20
2016    B         Z           U         30

如果我理解正确,请尝试以下方法

[伪代码]

left join ( Select *, rank() over (partition by whatMakesItUnique Order by ProductCode) distinction From tableA ) a
    on your conditions + a.distinction = 1
其思想是,如果whatMakesItUnique有两行,则将数字1指定给ProductCode“I”,如果只有一行,则将数字1指定给“U”,然后在此指定的数字上加入


“whatMakesItUnique”在您的情况下可能是年份、客户ID、行业ID。我认为您可以使用outer apply做您想做的事情:

outer apply
(select top (1) a.*
 from [raw].[ViewA] a 
 where a.year = b.year and a.CustomerID = b.CustomerID and
       a.IndustryID = b.IndustryID 
 order by (case a.ProductCode when 'I' then 1 when 'U' then 2 else 3 end)
) a

这将从
视图返回一行,按产品代码排序。

文本太多,数据太少。我看不出你的数据有什么问题,所以我很难帮助你。考虑编辑你的问题,包括说明你的问题的样本数据。请从这两个视图中添加一些示例数据来获得这个期望的结果。这将比你提到的解释更多。你的解释不清楚。根据输入中出现的行,说出所需结果中出现的行。给出可执行示例输入、DDL、视图(如果需要)和所需输出。也适用于您当前的输出。阅读并付诸行动。“我想加入视图A”是什么意思?和B一起?“我只想加入一次”是什么意思?很明显,你并不是说在包括产品在内的栏目中加入A到B;你是说,什么意思?你实际上并没有写清楚你的意思。