Ben bir Oracle arka plandan geliyorum bu yüzden bu sitede arama yaparken LISTAGG() 'nin kehanette ne yapacağını çoğaltmaya çalışmak için FOR XML PATH'i kullanma konusunda sayısız örnek buldum. Ancak, yapmaya çalıştığım şeyin bu kapsam dışında olup olmadığını bilmiyorum ya da hangi parçayı kaçırdığımı anlayamıyorum. Bulduğum her örnek sadece tek bir anahtar kimliği kullanıyor ve benim durumumda birden fazla tablodan birleştirme kullanmam gerekiyor.SQL Server FOR XML dilimini kullanarak birleştirin
Tabloların nasıl göründüğüne dair düzen İşte.
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 tablo driven_product.product_id = product_input.product_id VE driven_product.driver_product_input_num = product_input.product_input_num kullanarak product_input tabloya katılır. Driven_price tablosu, driven_product.product_id = driven_price.product_id, driven_product.driver_id = driven_price.driver_id ve product_input.product_value_num = driven_product.product_value_num kullanılarak birleştirilir.
ben aldık en yakın olan:
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
Bu, her fiyat içine tüm renkleri bir araya getirir.
Şimdi bariz olan şey, product_input.product_value_num öğesine driven_price.product_value_num öğesine katılmama olmasıdır. Bunu yaptığımda her rengi kendi satırına ayırır.
Bu yüzden mücadele ettiğim yer burası fiyatla yapmam gerekmesi. Bu yüzden ayrı olmak için "Beyaz, Mavi, Yeşil" ve "Sarı, Turuncu" olmalı.
Bunu SQLFiddle'a kurmaya çalıştım, ancak hata almaya devam ettim. Verebileceğiniz herhangi bir rehberlik takdir edilecektir.
Genellikle cevaplarınızı Bay Linoff seviyorum ama hiç çalışma olduğunu göremiyorum .. :( Everytime ı bir 'yanlış syntax' hatası alıyorum yanı çalıştırmayı deneyin. kadarıyla bunu değiştirme Yapabileceğim her iki fiyat için de her rengi iade etme problemini geri getiriyor. – Shaneis