0

这是我之前的问题的延续

在以下示例中:

id       PRODUCT ID    COLOUR
1        1001          GREEN
2        1002          GREEN
3        1002          RED
4        1003          RED

给定一个产品 ID,我只想检索一条记录 - 如果存在绿色,则为绿色,否则为红色。听起来我需要以某种方式使用 DISTINCT,但我不知道如何提供优先级规则。

我敢肯定,这很基础,但我的 SQL 技能不仅仅是生疏……

编辑:谢谢大家。请再问一个问题:如何使它适用于多条记录,即。如果 WHERE 子句返回不止一条记录?LIMIT 1 将限制整个集合,而我想要的是限制在每个产品中。

例如,如果我有类似 SELECT * FROM table WHERE productID LIKE "1%" ... 我如何检索每个唯一产品,但仍然尊重颜色优先级(绿色>红色)?

4

2 回答 2

2

试试这个:

SELECT top 1 *
FROM <table>
WHERE ProductID = <id>
ORDER BY case when colour ='GREEN' then 1 
              when colour ='RED' then 2 end

如果您想根据其他颜色订购,可以在案例声明中给出

于 2012-08-11T12:42:00.447 回答
1
SELECT * 
FROM yourtable
WHERE ProductID = (your id)
ORDER BY colour 
LIMIT 1

(绿色将出现在红色之前,你看。LIMIT 子句只返回一条记录)

对于您的后续编辑,您可以执行此操作

select yourtable.*
from
    yourtable
    inner join 
    (select productid, min(colour) mincolour 
    from yourtable
    where productid like '10%'
    group by productid) v
    on yourtable.productid=v.productid
    and yourtable.colour=v.mincolour    
于 2012-08-11T12:26:31.577 回答