如果满足第一个条件,如何停止condtions?

时间:2016-08-22 19:27:27

标签: sql-server

我在程序中有以下OR条件:

    WHERE table1.url LIKE '%_50%' OR table1.url LIKE '%_60%' OR table1.url LIKE '%_70%'

此where子句为包含ProductID唯一标识的每组数据带来包含这些值(_50,_60,_70)的所有URL。相反,我希望每个产品只能获得一条满足这些值的单一条件的记录。解决这个问题的最佳方法是什么?

1 个答案:

答案 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