我的头衔有点暧昧,但我会尝试在下面澄清。
我创建了一个带有几个连接的视图(A)。我试图用另一种观点加入该观点(B)。两个视图都包含年份字段,公司ID,行业ID和a,让我们称之为产品代码,其值为I或U.
视图B还包含员工ID,每个公司ID都有多个员工ID。任何员工ID都可以包含I,U或两者的产品代码。如果两者都有,那么将有2个相同的员工ID由产品代码推销。
现在我想在年份,客户ID,行业ID和产品代码上加入视图A.但是,由于视图B中的每个客户ID都可能发生两次(如果该客户的基础员工同时拥有产品代码I和U),我只想加入一次。
这是产品代码的客户ID分配:
我而不是U:165' 370
U而不是我:45' 27
你和我: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'
这是我目前正在运行的联接,虽然我排除了所有客户ID仅包含产品代码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
答案 0 :(得分:1)
如果我理解正确,请尝试以下内容
[伪]
left join ( Select *, rank() over (partition by whatMakesItUnique Order by ProductCode) distinction From tableA ) a
on your conditions + a.distinction = 1
如果whatCakesItUnique为ProductCode“I”有2行,或者当只有一行时加入“U”,然后加入此分配的数字
,则想法是分配数字1“whatMakesItUnique”可能是您的案例中的年份,客户ID,IndustyID。
答案 1 :(得分:0)
我认为你可以通过外部申请做你想做的事情:
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
这将从ViewA
返回一行,按产品代码优先排序。