2013-01-09 71 views
1

我有一個表如下。有條件的SQL Select語句

Name   Product 
--------------------- 
Value   2002 
HigherLimit * 
HigherLimit 2002 
LowerLimit  * 

我需要一個select語句來返回不同的(名稱)與以下條件。

如果一個產品是2002年,然後返回「2002」否則返回「*」

這裏是預期的結果

Name   Product 
--------------------- 
Value   2002 
HigherLimit 2002 
LowerLimit  * 

任何幫助將不勝感激。

感謝 二重

+0

是它獨特的名稱和產品,如果不能是不是如有的名字有一個產品使用2002年,如果不使用*?你的數據庫服務器是什麼? – Nix

+0

你正在使用什麼rdbms? MySQL的? SQLServer的?甲骨文? etc .... –

+0

只有不同的名稱,不同的產品是按名稱插入的。 IT是SQL 2008 R2 – niju

回答

2

由於2002將評估爲超過*時,你可以簡單地用一個MAX()的總量,除以Name分組:

SELECT 
    Name, 
    MAX(Product) AS Product 
FROM yourtable 
/* WHERE Product IN ('2002', '*') -- if necessary */ 
GROUP BY Name 
ORDER BY Product DESC 

http://sqlfiddle.com/#!2/8da48/2

但是,如果你真正的表有更多的值不僅僅是2002*,並且您要返回2002值而不是最大值,請使用CASE分隔出您想要的值(2002)並將所有其他值返回爲*。該MAX()骨料雖然在相同的方式應用:

SELECT 
    Name, 
    /* Force *all* values not 2002 to be `*` */ 
    MAX(CASE WHEN Product = '2002' THEN Product ELSE '*' END) AS Product 
FROM yourtable 
GROUP BY Name 
ORDER BY Product DESC 

http://sqlfiddle.com/#!2/f03af/2