私は、販売された製品IDをコンマで区切った文字列を入力として取得するSPに取り組んでいます。IN()文 - TSQLを使用して計算に重複IDを含めることはできますか?
制限:
- 新しい入力を追加することはできませんが、入力データ型
を変更することはできません私は、入力されたカンマ区切りの文字列を取得し、テーブルを返す関数を持っています各IDの行が含まれます。
SELECT * FROM SplitStringIDsIntoTable(@ProductIDs,',')
次に、各販売品目の財のコストを計算することができるようにする(項目が3回を売却した場合、私はそのCOG 3回を追加する必要があり、残念ながらそれは新しい入力を取得するには問題外であります)私は、各販売アイテムの数量を指示し、私のような何かをやっていた:
SET x = (SELECT SUM(p.COG) FROM Products p WHERE p.ProductId IN
(SELECT * FROM SplitStringIDsIntoTable(@ProductIDs,',')))
しかし、ここで問題は、私は、入力として数量を持っていない、です。 IN()ステートメントを使用すると、各IDは予想通り1回だけカウントされます。
:とまったく同じ結果を返すSET x = (SELECT SUM(p.COG) FROM Products p WHERE p.ProductId IN
('11,12,13,11,13'))
:例えば
は私のSQL文は次のようになり12,13,11,13' 、
を'11として入力された私の販売製品IDを言うことができます
SET x = (SELECT SUM(p.COG) FROM Products p WHERE p.ProductId IN
('11,12,13'))
これは正しい合計を与えません。 私が探しているのは、重複した値も考慮に入れていますか?
私はWhileループを使いたくありません。
PS:タイトルでこの質問をする方法がわからないので、質問タイトルは意味がないように見えるかもしれません。それを更新してください。代わりにIN
の
Thxを多くのJOIN戻ったが、私は(商品コード)を削除する必要がありました。そうでなければ、私は次のようになりました: テーブル値関数 'SplitStringIDsIntoTable'は列エイリアスを持つことができません。このように作業 その:製品Pから @x SELECT = SUM(p.COG) はp.ProductId = ss.ProductId ON dbo.SplitStringIDsIntoTable(@ProductIDs、 '')SS を登録しよう。 – curiousBoy