私のタイトルは少し曖昧ですが、私は以下で明確にしようとします。論理/条件付き左結合
私はいくつかの結合でビュー(A)を作成しました。私は別のビュー(B)でそのビューに参加しようとしています。両方のビューには、年フィールド、会社ID、業種ID、および、それを呼び出す、IまたはUの値をとる商品コードが含まれています。
ビューBには、すべての会社の従業員ID ID。従業員IDには、I、U、またはその両方の製品コードが含まれている可能性があります。両方がある場合、生産コードによって識別される2つの同一の従業員IDが存在します。
今年は、A、Year、Customer ID、Industry ID、Product CodeのビューAに参加したいと考えています。しかし、ビューBのすべてのカスタマーIDが2回発生する可能性がある(その顧客の従業員が製品コードIとUの両方を持っている場合)、一度だけ参加したい。
これは、製品コードのカスタマーIDの分布である:
IおよびNOT U:165'370
UおよびNOT 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'
これは私が得意で唯一の製品コードは/私は顧客IDごとに一度参加したい理由をUにしたすべてのレコードを除外していますけれども、私は、現在で実行している結合ですYear/IndustryIDは、後でView Aの他の値を集計するためです。したがって、その値を2度表示することはできません。私が正しく理解していれば
現在の結果
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
私は
[擬似コード]
left join (Select *, rank() over (partition by whatMakesItUnique Order by ProductCode) distinction From tableA) a
on your conditions + a.distinction = 1
I以下のような何かをしようと、
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
あまりにも多くのテキスト、あまりにも少ないデータです。私はあなたのデータの問題を見ることができないので、私はあなたを助けることが非常に難しいです。あなたの質問を編集し、あなたの問題を示すサンプルデータを含めることを検討してください。 –
両方のビューからサンプルデータを追加して、この結果を得てください。これは、あなたが言及した以上のものを説明します。 –
こんにちは。あなたの説明ははっきりしていません。入力にどの行が表示されるかに基づいて、目的の結果にどの行が表示されるかを示します。必要に応じて、実行可能な例入力DDLを表示し、必要な出力を表示します。あなたの現在の出力にも。 [mcve]を読んで行動する。「ビューAに参加したい」という意味はどうですか? Bで? 「私は一度だけ参加したい」とはどういう意味ですか?そして、あなたは明らかに、製品を含むコラムのAからBへの参加を意味しません。あなたは何か*そのようなものを意味します - あなたは何を意味しますか?あなたは、あなたが実際に何を意味するのか、はっきりと書くのではない。 – philipxy