2017-02-21 3 views
4

特定のブランドのアイテムを選択したい場合、ブランドがテーブルに含まれていない場合は、ブランド名が「すべて」のアイテムを選択します。私はこのようなTABLE1があります。SQL Serverに存在する場合に応じて行を選択する方法は?

Discount | Brand 
    20 | ford 
    10 | all 

をそして私は@Brand_nameという名前のクエリパラメータを持っています。私が望むのは、テーブルに存在するならば、ブランドのレートを返すことだけです。それ以外の場合は、ブランド名「all」のレートを返します。それを行うための正しい質問は何ですか。助けてくれてありがとう。

+0

THENあなたのクエリを記述するときに、CASEを使用することができます。 –

答えて

7

はこれを試してみてください:Brand = 'all'を持つレコードが選択されているとTOP 1SELECT句で使用されているので

SELECT TOP 1 Discount 
FROM mytable 
WHERE Brand = @Brand_name OR Brand = 'all' 
ORDER BY CASE 
      WHEN Brand = 'all' THEN 1 
      ELSE 0 
     END 

クエリは常につのレコードを返します。これをしてください試してみてください

;WITH CTE AS (
    SELECT Discount, 
      RANK() OVER (ORDER BY CASE 
            WHEN Brand = 'all' THEN 1 
            ELSE 0 
            END) AS rnk 
    FROM mytable 
    WHERE Brand = @Brand_name OR Brand = 'all' 
) 
SELECT Discount 
FROM CTE 
WHERE rnk = 1 

Demo here

+0

同じブランド名の行が複数あるので、2番目の解決策が必要でした。それは問題を解決しました。ありがとうございました。 –

2

あなたが より1つの 'Brand'レコードを持っていて、 それらのすべては、あなたが次のクエリを使用することができ、返却したい場合は

IF EXISTS (SELECT 1 FROM table1 WHERE Brand = @Brand_name) 
BEGIN 
    SELECT Discount FROM table1 WHERE Brand = @Brand_name 
END 
ELSE 
BEGIN 
    SELECT Discount FROM table1 WHERE Brand = 'all' 
END 
0

これを別のゾルとして加えるution、ではない、これは良い場合かかわら確認:

SELECT TOP 1 Discount FROM (
    SELECT Discount FROM table1 WHERE [email protected]_name 
    UNION SELECT Discount FROM table1 WHERE BrandName='all' 
) discount 
+0

@Brand_nameの2行が返されます。 – jarlh

+0

@jarlhに気付き、ありがとう、編集されました。 –

0

私はより良い性能をもたらすことができると思う異なったアプローチのために行くだろう:

SELECT top 1 discount , 
      brand 
FROM 
    (SELECT discount , 
      brand , 
      selector , 
      min(selector) over() [minselect] 
    FROM 
    (SELECT discount , 
       brand , 
       1 [selector] 
     FROM mytable 
     WHERE brand = 'ford' 
     UNION ALL 
     SELECT discount , 
       brand , 
       2 [selector] 
     FROM mytable WHERE brand = 'all') r 
    GROUP BY discount , 
      brand , 
      selector) r 
WHERE selector = minselect 
ORDER BY discount DESC 
関連する問題