私はオラクルのバックグラウンドから来ています。このサイトで検索を実行すると、FOR XML PATHを使用してLISTAGG()がOracleで行うことを複製しようとする方法に関する無数の例が見つかりました。しかし、私がやろうとしていることがその範囲外であるか、私は何が欠けているのか分かりません。私が見つけたすべての例では、単一のキーIDを使用しています。私の場合、複数のテーブルからの結合を使用する必要があります。FOR XMLディレンマを使用したSQL Serverの連結
テーブルの見た目のレイアウトは次のとおりです。
CREATE TABLE driven_product
([PRODUCT_ID] int, [DRIVER_ID] int, [DRIVER_PRODUCT_INPUT_NUM] int);
INSERT INTO driven_product
([PRODUCT_ID], [DRIVER_ID], [DRIVER_PRODUCT_INPUT_NUM])
VALUES (1, 2, 3);
CREATE TABLE product_input
([PRODUCT_ID] int, [PRODUCT_INPUT_NUM] int, [PRODUCT_VALUE_NUM] int, [COLOR] VARCHAR (50));
INSERT INTO product_input
([PRODUCT_ID], [PRODUCT_INPUT_NUM], [PRODUCT_VALUE_NUM], [COLOR])
VALUES
(1, 3, 1, 'White'),
(1, 3, 2, 'Blue'),
(1, 3, 3, 'Green'),
(1, 3, 4, 'Yellow'),
(1, 3, 5, 'Orange');
CREATE TABLE driven_price
[PRODUCT_ID] int, [DRIVER_ID] int, [PRODUCT_VALUE_NUM] int, [PRICE] int);
INSERT INTO driven_price
([PRODUCT_ID], [DRIVER_ID], [PRODUCT_VALUE_NUM], [PRICE])
VALUES
(1, 2, 1, 10),
(1, 2, 2, 10),
(1, 2, 3, 10),
(1, 2, 4, 20),
(1, 2, 5, 20);
driven_productテーブルはdriven_product.product_id = product_input.product_id AND driven_product.driver_product_input_num = product_input.product_input_numを使用してproduct_inputテーブルに結合します。 driven_priceテーブルは、 driven_product.product_id = driven_price.product_id、driven_product.driver_id = driven_price.driver_id、およびproduct_input.product_value_num = driven_product.product_value_numを使用して結合されます。
私が得ている最も近いです:
SELECT STUFF((SELECT '/' + color
FROM product_input pi
WHERE pi.product_id = dp.product_id
AND pi.product_input_num = dp.product_input_num
FOR XML PATH('')), 1, 1, ''), dpr.price
FROM driven_product dp
INNER JOIN driven_price dpr ON dp.product_id = dpr.product_id
AND dp.driven_id = dpr.driven_id
これは、それぞれの価格にすべての色を組み合わせています。
ここで明白なことは、product_input.product_value_numをdriven_price.product_value_numに参加させないことです。私がそれをするとき、それは各色をそれ自身の行に分ける。
これは私が苦労しているところで、私はそれを価格で行う必要があるということです。だから、私は "白、青、緑"と "黄色、オレンジ"を分ける必要があります。
これをSQLFiddleで設定しようとしましたが、エラーが発生しました。あなたが提供できるガイダンスは高く評価されます。
は通常、あなたの答え氏Linoffを愛し、私はすべてで働いていることを確認することはできません。.. :( 毎回私は私が '間違ってはsyntaxエラーを取得するだけでなく、それを実行しよう。 限り、それを変更します私ができるように、両方の価格のすべての色を返すという問題を取り戻します。 – Shaneis