T-SQLクエリでテーブルへの条件付き結合を作成したいとします。この例で使用されるテーブル(唯一つの追加のテーブル製品のリストを有する)ノースウィンドデータベースから条件付きでテーブルを結合する
表製品および表カテゴリー多対多の関係を有している、したがってテーブル製品のリストは、画像に入ってきます。
私は特定のカテゴリに該当する製品ごとにテーブルたOrderDetailsの数量の列の合計を必要とします。だから私は以下のようなクエリを持っています
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Join ProductCategories pc On pc.ProductID = p.ProductID
And pc.CategoryID = @CategoryID
Group By p.ProductName
@CategoryIDはオプションのパラメータです。場合には、それが供給されていないですので、 必要とされることはありません、テーブルの製品のリストに参加して、クエリは、私は全体のクエリを繰り返すことなく、これを達成したいもの
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Group By p.ProductName
の下のようになります。もし条件
(以下など)
If @CategoryID Is Null
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Group By p.ProductName
Else
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Join ProductCategories pc On pc.ProductID = p.ProductID
And pc.CategoryID = @CategoryID
Group By p.ProductName
は、これは製品のリストのような多くの他のテーブルと条件を持つクエリの簡易版です。複数の複数のIf条件とクエリの繰り返しが必要になります。私は動的にクエリを生成しようとしました。それは動作しますが、クエリは全く読めません。
すべてのソリューションはありますか? ありがとうございます。私は、「これはそれをカットするかどうか、私は知りませんが、MySQLにあなたがして()はまだ残っているが、ちょうど場合
Select p.ProductName, Sum(od.Quantity) As Qty
From Products p
Join OrderDetails od On od.ProductID = p.ProductID
Join ProductCategories pc On pc.ProductID = p.ProductID
And pc.CategoryID = if(@CategoryID is null , pc.CategoryID, @CategoryId)
Group By p.ProductName
はいのような何かができるT-SQLに精通していないよ
重複のod.Quantityは、私が避けようとしていることであり、@ CategoryIDが指定されていない場合、ProductCategoriesテーブルに参加したくない理由があります。 – Romeo
ありがとうございます。 – Romeo