0

これは私の前の質問の続きです

次の例では:

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

製品IDを指定して、レコードを1つだけ取得します。レコードが存在する場合は緑、それ以外の場合は赤のレコードを取得します。どういうわけかDISTINCTを採用する必要があるようですが、優先ルールの提供方法がわかりません。

かなり基本的なことだと思いますが、私のSQLスキルはさびた以上のものです。

編集:皆さんありがとうございます。もう1つ質問してください。これを複数のレコードで機能させるにはどうすればよいですか。WHERE句が複数のレコードを返す場合はどうなりますか?LIMIT 1はセット全体を制限しますが、私が望むのは各製品内だけを制限することです。

たとえば、SELECT * FROM table WHERE productID LIKE "1%"のようなものがある場合、色の優先度(GREEN> RED)を尊重しながら、各一意の製品を取得するにはどうすればよいですか?

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

別の色に基づいて注文する場合は、caseステートメントで指定できます

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

(緑は赤の前に表示されます。ご覧のとおり、LIMIT句は1つのレコードのみを返します)

その後の編集では、これを行うことができます

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 に答える