2016-11-25 8 views
-1

次のコードでは、purchase_priceが大文字小文字のorder byステートメントをオーバーライドしています。Second Order By SQL Serverで最初に上書きする

SELECT 
    i.products_mpn, i.active, 
    i.distributor_code, i.sales_price 
FROM 
    @duplicates d 
LEFT JOIN 
    import i ON i.products_mpn = d.products_mpn 
      AND i.distributor_code = (SELECT TOP 1 distributor_code 
             FROM dbo.kting_ICECAT_import 
             WHERE products_mpn = d.products_mpn 
             ORDER BY 
              (SELECT 
               CASE 
                WHEN (i.distributor_code = 'x' or i.distributor_code = 'y') AND CAST(stock as int) > 0 
                THEN 2 
                WHEN CAST(stock as int) > 0 
                THEN 1 
                ELSE 0 
               END) DESC, 
               CAST(purchase_price AS decimal(28,12))) 

それはcase文での順序で動作するように取得する方法と、その後purchase_priceはありますか?

+0

サンプルデータ、pls –

答えて

1

最初にCASEの発注を適用してからpurchase_priceの発注を希望する場合は、ORDER BYには既に適切な条件が記載されています。私はがあなたのCASE式で何をしているのか、あなたの現在のクエリが実行されているのか分かりません。このようなものは、あなたが気にしていたものかもしれません:

ORDER BY CASE WHEN (i.distributor_code = 'x' or i.distributor_code = 'y') AND 
        CAST(stock as int) > 0 THEN 2 
       WHEN CAST(stock as int) > 0 THEN 1 
       ELSE 0 
     END DESC, 
     CAST(purchase_price AS DECIMAL(28,12)) 
0

問題はORDER BY SELECTにありました。私は左から列を使用していた "i.distributor_code"はdistributor_codeだけにする必要があります