我在下面有这个查询,它有效。但是,运行需要30分钟。本质上,sku字段是唯一的,但它加入的表具有多个与entity_id对应的值。我只想返回它找到的第一个值。我明白我现在这样做的方式有效,但根本没有效率。任何提示将不胜感激。
很抱歉这个奇怪的代码示例。无法在代码选项下进行格式化。
谢谢!
SELECT
FROM
(
SELECT DISTINCT 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
) AS a
WHERE a.RowNumber = 1
答案 0 :(得分: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