Мне нужно выбрать данные ниже (imei-> websiteprice) вместе с двумя верхними дублированными sku. До сих пор я получил идею от «Вадим Лобода», хотя я получил список дубликатов SKU, используя partition
, я хочу напечатать ТОП-2.
``` Sku Row_Number
R-SONXPZ5CWHT-VF 1
R-SONXPZ5CWHT-VF 2
R-SONXPZ5CWHT-VF 3
R-SONXPZ5CWHT-VF 4
R-SONXPZ5GRN 1
R-SONXPZ5BLK-EE 1
R-SONXPZ5BLK-EE 2
R-SONXPZ5BLK-EE 3
I want to just select the top 2 for each duplicate sku (which is
row_number 1 & 2) and order it
WITH cteSku
AS
(
SELECT
i.Id
,idesc.Sku
,ROW_NUMBER() OVER(Partition by idesc.Sku ORDER BY idesc.Sku) AS dupSku
FROM Item AS i
INNER JOIN ItemDescription idesc
ON i.Id = idesc.Id
)
SELECT
i.Imei
,make.[Name] 'Make'
,model.[Name] 'Model'
,color.[Name] 'Color'
,storage.[Name] 'Storage'
,condition.[Name] 'Condition'
,connectivity.[Name] 'Connectivity'
,network.[Name] 'Network'
,idesc.Description 'Product'
,idesc.Sku 'SKU'
,cteSku.dupSku 'DupSku'
,i.Quantity 'Quantity'
,i.Id 'Stock ID'
,i.StoredOnUtc 'Scan in Date'
,DATEDIFF(DAY, I.StoredOnUtc, GETUTCDATE()) 'Age in Days'
,IIF(i.TaxSchemeId = 1, 'Standard', 'Marginal Vat') 'Tax Scheme'
,i.OriginalCogs 'Cost of Goods'
,i.RemanCost 'Roman Cost'
,i.OriginalPurchaseDate 'Original Purchase Date'
,i.Source 'Source'
,idesc.BasePrice 'Base Price'
,idesc.WebsitePrice 'Current Website Price'
FROM Item AS i
INNER JOIN ItemDescription idesc
ON i.Id = idesc.Id
LEFT JOIN (
SELECT * FROM cteSku
)AS cte ON cte.Id = i.Id
LEFT JOIN ItemDescriptionMake make
ON idesc.ItemDescriptionMakeId = make.Id
LEFT JOIN ItemDescriptionModel model
ON idesc.ItemDescriptionModelId = model.Id
LEFT JOIN ItemDescriptionColor color
ON idesc.ItemDescriptionColorId = color.Id
LEFT JOIN ItemDescriptionMemorySize storage
ON idesc.ItemDescriptionMemorySizeId = storage.Id
LEFT JOIN ItemGrade condition
ON idesc.ItemDescriptionGradeId = condition.Id
LEFT JOIN ItemDescriptionConnectivity connectivity
ON idesc.ItemDescriptionConnectivityId = connectivity.Id
LEFT JOIN ItemDescriptionNetwork network
ON idesc.ItemDescriptionNetworkId = network.Id
LEFT OUTER JOIN ProcessStatusWorkflowRecord AS psw
ON i.ProcessStatusWorkflowRecordId = psw.Id
LEFT OUTER JOIN Process AS p
ON psw.NextProcessId = p.Id
WHERE (p.SystemName = 'storage_out') AND (i.ItemTypeId = 1)
Я попытался добавить 'AND cteSku.dupSku <3' в нижней части из ваших ответов. это не то, что я ожидал. Результат не включает разделение
он показывает только 1 для каждого sku. </p>
Но когда я попытался использовать их, не присоединяясь к таблице:
SELECT
id,
sku,
ROW_NUMBER() OVER(Partition by Sku ORDER BY Id) AS dupSku
FROM ItemDescription
ORDER BY dupSku desc
Показывает результат, который я хочу (см. Выше).