从SQL的记录,类似的记录在同一个结果行

问题描述 投票:0回答:1

这是棘手的,我被困。我需要从有库存记录,与具有另一个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中)

这里的结果是什么样子,现在的截图:

enter image description here

sql sql-server
1个回答
0
投票

因此,一个长期的斗争后,我找到了工作。其结果是正是我想要的,但我敢肯定,它远远资源高效。

我创建了一个临时表变量,并把那个有匹配属性的项目。但要挑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
© www.soinside.com 2019 - 2024. All rights reserved.