2017-09-08 8 views
0

私は以下のこの質問をしています。しかし、走るのに30分以上かかります。基本的に、skuフィールドはユニークですが、結合するテーブルにはentity_idに対応する複数の値があります。私はそれが見つけた最初の価値を返すだけです。私が今やっているやり方は今はうまくいくと理解していますが、効率的ではありません。どんなヒントも大歓迎です。最初の一致のみを内部結合と返します

申し訳ありませんが、奇妙なコードのサンプルです。コードオプションでフォーマットすることができませんでした。

ありがとうございます!

SELECT 
 
FROM 
 
(
 
\t SELECT DISTINCT substring(sku, 1, 
 
\t (
 
\t SELECT CASE 
 
\t \t WHEN charindex('-', sku)-1 = -1 
 
\t \t THEN 0 
 
\t \t ELSE charindex('-', sku)-1 
 
\t END 
 
\t)) AS sku, 
 
\t CAST(cpet.value AS varchar(max)) AS 'DESCRIPTION', cpev.value AS 'URL_KEY', CONCAT('https://azureedge.net/catalog/product', cpemg.value) AS 'image', ROW_NUMBER() OVER(PARTITION BY sku ORDER BY sku) AS RowNumber 
 
\t FROM imp_mg.CATALOG_Product_Entity cpe 
 
\t INNER JOIN 
 
\t imp_mg.CATALOG_Product_Entity_Text cpet 
 
\t ON cpe.entity_id = cpet.entity_id 
 
\t INNER JOIN 
 
\t imp_mg.CATALOG_Product_Entity_Varchar cpev 
 
\t ON cpe.entity_id = cpev.entity_id 
 
\t INNER JOIN 
 
\t imp_mg.CATALOG_Product_Entity_Media_Gallery cpemg 
 
\t ON cpe.entity_id = cpemg.entity_id 
 
) AS a 
 
WHERE a.RowNumber = 1

答えて

1

ご回答のために、この

SELECT top 1 substring(sku, 1, 
     (
     SELECT CASE 
      WHEN charindex('-', sku)-1 = -1 
      THEN 0 
      ELSE charindex('-', sku)-1 
     END 
     )) AS sku, 
     CAST(cpet.value AS varchar(max)) AS 'DESCRIPTION', cpev.value AS 'URL_KEY', CONCAT('https://azureedge.net/catalog/product', cpemg.value) AS 'image', ROW_NUMBER() OVER(PARTITION BY sku ORDER BY sku) AS RowNumber 
     FROM imp_mg.CATALOG_Product_Entity cpe 
     INNER JOIN 
     imp_mg.CATALOG_Product_Entity_Text cpet 
     ON cpe.entity_id = cpet.entity_id 
     INNER JOIN 
     imp_mg.CATALOG_Product_Entity_Varchar cpev 
     ON cpe.entity_id = cpev.entity_id 
     INNER JOIN 
     imp_mg.CATALOG_Product_Entity_Media_Gallery cpemg 
     ON cpe.entity_id = cpemg.entity_id 

ORDER BY sku 
+0

感謝をしてみてください。私は質問を実行し、27分でそれを殺した。 Azureパイプラインのすべての結合を処理しようとしています。うまくいけば、それは実際のクエリの負荷を軽減します。 –

関連する問題