Как я могу распечатать только топ 2 дубликата SKU? - PullRequest
0 голосов
/ 11 апреля 2019

Мне нужно выбрать данные ниже (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

Показывает результат, который я хочу (см. Выше).

1 Ответ

0 голосов
/ 11 апреля 2019

Я сделал несколько исправлений.ВСТАВЬТЕ ВНУТРЕННЕЕ СОЕДИНЕНИЕ и добавьте условие ГДЕ внизу.Надеюсь, это поможет вам:

  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
    INNER JOIN
       cteSku
    ON 
    cteSku.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...