私はSQLのnoobですので、これは皆さんにとって非常に基本的かもしれませんが、私はここでいくつかのロジックを適用するのに苦労しています。私は2つのテーブル(サプライヤと消費者のテーブル)から3つの取引テーブルでリンクされたすべての都市と州のリストを作成し、各都市のサプライヤと消費者の数をグループ化して一覧表示しようとしています。注目すべき点は、都市と州の数が2つのテーブルに一致しないことです。一致するものについては、サプライヤーと消費者の対応する数を示す出力が必要です。州/都市が1つのテーブルに存在し、それ以外のテーブルに存在しない場合は、対応する数値列の下に表示される0の数値が必要です。 私は下表のように、サプライヤ、コンシューマ、トランザクションの3つのテーブルをSupp_IDとCon_IDでキーとしてリンクしています。SQL結合の問題 - 期待された出力が得られません
SELECT S.State, S.City, COUNT(S.Supp_ID) AS Supp_Count, COUNT(C.Con_ID) AS Cust_Count
FROM SuppTb S, TransTb T, ConsTb C
WHERE S.Supp_ID = T.Supp_ID AND T.Con_ID = C.Con_ID
GROUP BY S.State, S.City
このクエリを入力した場合、私はサプライヤとコンシューマの数カウントに対して奇妙な数を取得しています。私の最高の推測は、そこにはどこかで自己結合がなければならないが、ここからこれをどうやって取るかはわからない。どんな助けもありがとう!
SELECT DISTINCT City, State, COUNT(Supp_ID)
FROM SuppTb S GROUP BY City, State
と
SELECT DISTINCT City, State, COUNT(Con_ID)
FROM ConTb C GROUP BY City, State
私が個別に両方のテーブルから必要な出力が得られます。
PSをuをありがとうございます。出力1は3列と7行、出力2は3列と6行です。私は4つの列と8つの行と1つの組み合わせた出力が必要です。これらの2つの出力を結合し、必要に応じてゼロを挿入する方法を理解するだけです。
編集 - 正確な質問は、各都市のサプライヤーと消費者のそれぞれの数でサプライヤーまたは消費者の州と都市の比較リストを生成することです。 SUPP /短所テーブルは都市/状態が列挙されていない場合に出力用
State City Supp_count Cons_count
Illinois Chicago 2 3
Illinois Springfield 2 0
Michigan Lansing 0 3
など即ち、0を出力 - 望ましいです。
編集2このコードを試してみて、私に顧客数をカウントしてもらいましたが、サプライヤ数には奇妙な数字があります。私は今完全に立ち往生しています!アイデアの不足..
SELECT C.State, C.City, COUNT(DISTINCT S.Supp_ID) AS Supp_Count, COUNT(DISTINCT C.Con_ID) AS Cust_Count
FROM Tb_Supplier S LEFT JOIN Tb_Transactions T
ON S.Supp_ID = T.Supp_ID LEFT JOIN
Tb_Consumer C ON T.Con_ID = C.Con_ID
GROUP BY C.State, C.City
EXCEPT
SELECT S.State, S.City, COUNT(DISTINCT S.Supp_ID) AS Supp_Count, COUNT(DISTINCT C.Con_ID) AS Cust_Count
FROM Tb_Supplier S LEFT JOIN Tb_Transactions T
ON S.Supp_ID = T.Supp_ID LEFT JOIN
Tb_Consumer C ON T.Con_ID = C.Con_ID
GROUP BY S.State, S.City
ありがとうございます。構文でJOINするとわかりやすくなります。しかし、依然として望ましい出力は得られませんでした。正確に必要なものを含めるように編集しました。LEFT JOINを使用して作成した最新のトレールを追加しました。顧客数は適切ですが、依然としてサプライヤ数あなたの質問を実行したときのように) – Cur123
@ Cur123。 。 。あなたは 'COUNT(DISTINCT)'を使っていますか? –
はい私はMr.Linoffをやった。私は、UNIONを使用して最初にテンポラリテーブルを作成し、その後、完全な外部ジョイントを通じてサプライヤテーブルと消費者テーブルにテンポラリテーブルをリンクして、私が望む正確な結果を得ることができました。本当に長い時間を過ごしましたが、ついにそれを得るために非常に満足していました!私は私がそれを得るとすぐに自分の答えを投稿しました..私はそれを明確にしていない場合は謝罪..再びあなたのサポートのおかげで! – Cur123