2011-04-28 163 views
2

以下是爲特定NO檢索的數據。SQL查詢獲取

id color no 
5939 Black  1 
5959 Silver 1 
7900 Blue  1 
7593 Red  1 

表有Black所以我必須只返回ID 5939。如果我的桌子沒有Black的記錄,那麼我必須返回銀色ID 5959,藍色和紅色也一樣。

注:我應該只有一個輸入參數我的SQL查詢,這是NO

+0

這是什麼RDBMS? – 2011-04-28 11:54:58

+0

你是怎麼指定顏色之間的順序關係的(先是黑色,然後是銀色等等) – 2011-04-28 14:34:15

回答

2

一個SQL Server的答案

SELECT TOP 1 id,color,no 
FROM YourTable 
WHERE [email protected] 
ORDER BY CASE Color 
      WHEN 'Black' THEN 1 
      WHEN 'Silver' THEN 2 
      WHEN 'Blue' THEN 3 
      WHEN 'Red' THEN 4 
      END 

還是比較便攜的答案

WITH T 
    As (SELECT id, 
       color, 
       no, 
       ROW_NUMBER() OVER (ORDER BY CASE Color 
                WHEN 'Black' THEN 1 
                WHEN 'Silver' THEN 2 
                WHEN 'Blue' THEN 3 
                WHEN 'Red' THEN 4 
               END) AS RN 
     FROM YourTable 
     WHERE no = @no) 
SELECT id, 
     color, 
     no 
FROM T 
WHERE RN = 1 ; 
+0

感謝Martin ......我需要添加一件事物......實際上,表格包含許多顏色和許多行,所以它不會是理想的指定每種顏色的情況下。 – rozar 2011-04-28 13:17:55

+0

感謝Martin ...我在CASE構造中使用了ELSE,它工作得很好.. – rozar 2011-04-29 12:44:08

0

我建議像「SELECT * FROM表,其中沒有限制= 1?」。關鍵字LIMIT取決於你的數據庫,對於DB2來說,它將是「select * from table where no =?only first 1 rows only」。

0

這是一個選項,將返回第一個ID號。

SELECT MIN(Id) 
    FROM Table a 
WHERE No = ?