这是我之前的问题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)?
答案 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