根据列值优先级选择唯一记录

时间:2012-08-11 12:23:27

标签: sql sqlite select

这是我之前的问题here的延续。

在以下示例中:

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

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

非常基础我很确定,但我的SQL技能不仅仅是生锈......

编辑:谢谢大家。还有一个问题:如何使用多个记录,即。如果WHERE子句返回的不仅仅是一条记录?限制1将限制整个集合,而我想要的是限制每个产品。

例如,如果我有SELECT * FROM table WHERE productID LIKE“1%”......我如何检索每个独特的产品,但仍然尊重颜色优先级(绿色> RED)?

2 个答案:

答案 0 :(得分:2)

试试这个:

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

如果您想根据其他颜色订购,可以在案例陈述中提供

答案 1 :(得分:1)

SELECT * 
FROM yourtable
WHERE ProductID = (your id)
ORDER BY colour 
LIMIT 1

(绿色将在Red之前出现,你看.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