2011-04-28 92 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 = ?