我在程序中有以下OR条件:
WHERE table1.url LIKE '%_50%' OR table1.url LIKE '%_60%' OR table1.url LIKE '%_70%'
此where子句为包含ProductID唯一标识的每组数据带来包含这些值(_50,_60,_70)的所有URL。相反,我希望每个产品只能获得一条满足这些值的单一条件的记录。解决这个问题的最佳方法是什么?
答案 0 :(得分:4)
您可以使用ORDER BY
子句,例如:
ORDER BY CASE
WHEN table1.url LIKE '%_50%' THEN 1
WHEN table1.url LIKE '%_60%' THEN 2
WHEN table1.url LIKE '%_70%' THEN 3
END
在TOP 1
子句中使用SELECT
可以获得所需的记录。
修改强>
要为每个分区获取一条记录,您可以使用以下查询:
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY CASE
WHEN table1.url LIKE '%_50%' THEN 1
WHEN table1.url LIKE '%_60%' THEN 2
WHEN table1.url LIKE '%_70%' THEN 3
END
ORDER BY table1.url) AS rn
FROM table1
WHERE table1.url LIKE '%_50%' OR
table1.url LIKE '%_60%' OR
table1.url LIKE '%_70%' ) AS t
WHERE t.rn = 1