这是棘手的,我被困。我需要从有库存记录,与具有另一个SKU这是基于相同的大小,相同品牌等比赛添加列的表收到SKU细节
所以我在运行查询是这样的:
SELECT h.orders_header_id,
h.order_number,
CONVERT(VARCHAR,h.order_date, 102) AS order_date,
h.first_sku,
h.first_title,
i.size,
i.brand,
i.pic,
i.channel,
h.c_email,
h.delivery_status
FROM orders_header h
LEFT JOIN
(SELECT sku,
SIZE,
brand,
imageserver + sku + 'A.JPG' AS pic,
channel
FROM inv_ALL) i ON h.first_sku = i.sku
WHERE h.delivery_status LIKE '%|Delivered|%'
AND h.delivery_status NOT LIKE '%Arrival in Destination Country%'
AND h.delivery_status LIKE (CONVERT(VARCHAR, GETDATE(), 112) +'%')
AND i.pic IS NOT NULL
我需要的是有这些列:
S1,S1title,S1pic,S2,S2title,S2pic,S3,S3title,S3pic
其中,S1将是一个匹配SKU从具有相同的尺寸和品牌为h.first_sku和非零i.availablequantity inv_ALL表拉升。 S1title将是它的标题和S1pic将它的照片(上图)。同为S2和S3。和S1 / S2 / S3必须的SKU比first_sku等。
这些被认为是“热门推荐”,以显示给客户提供其购买的建议一起。
从昨天起,我一直在努力,但是不能想办法让它在同一行中拉这些记录作为添加列。
(Microsoft SQL Server的2014 - 12.0.2000.8(X64)2014年2月20日在Windows NT 6.1 20时04分26秒版权所有(c)Microsoft公司开发人员版(64位)(建设7601:Service Pack 1中)
这里的结果是什么样子,现在的截图:
因此,一个长期的斗争后,我找到了工作。其结果是正是我想要的,但我敢肯定,它远远资源高效。
我创建了一个临时表变量,并把那个有匹配属性的项目。但要挑3个配套项目,我使用JOIN三次在同一个表(我敢打赌,可以用更好的方法来代替),因为我要挑基于等级每列不同的项目。
DECLARE @skus TABLE
(rk INT, sku VARCHAR(50), brandsize VARCHAR(300), title VARCHAR(500), pic VARCHAR(500))
INSERT INTO @skus
SELECT ROW_NUMBER() OVER(PARTITION BY channel + '_' + brand + '_' + size ORDER BY sku) AS rk, sku, channel + '_' + brand + '_' + size, title, imageserver + sku + 'A.JPG'
FROM inv_ALL
WHERE availablequantity > 0
AND channel + '_' + brand + '_' + size IS NOT NULL
ORDER BY channel + '_' + brand + '_' + size
SELECT h.orders_header_id, h.order_number, CONVERT(VARCHAR,h.order_date,102) AS order_date, h.site, h.first_sku, h.first_title, i.size, i.brand, i.pic, i.channel, h.c_email, h.c_name, h.c_address1, h.c_address2, h.c_address3, h.c_city, h.c_state, h.c_zip, h.c_country, h.c_phone, h.delivery_status, s1.t1, s1.p1, s2.t2, s2.p2, s3.t3, s3.p3
FROM chanadv.dbo.orders_header h
LEFT JOIN (SELECT sku, size, brand, imageserver + sku + 'A.JPG' AS pic, channel FROM casql.dbo.inv_ALL) i ON h.first_sku = i.sku
LEFT JOIN (SELECT brandsize, title AS t1, pic AS p1 FROM @skus WHERE rk = 1) s1 ON i.channel + '_' + i.brand + '_' + i.size = s1.brandsize
LEFT JOIN (SELECT brandsize, title AS t2, pic AS p2 FROM @skus WHERE rk = 2) s2 ON i.channel + '_' + i.brand + '_' + i.size = s2.brandsize
LEFT JOIN (SELECT brandsize, title AS t3, pic AS p3 FROM @skus WHERE rk = 3) s3 ON i.channel + '_' + i.brand + '_' + i.size = s3.brandsize
WHERE h.delivery_status LIKE '%|Delivered|%'
AND h.delivery_status NOT LIKE '%Arrival in Destination Country%'
AND h.delivery_status LIKE (CONVERT(VARCHAR, GETDATE(), 112) +'%')
AND h.c_country = ''
AND i.pic IS NOT NULL