条件SQL Select语句

时间:2013-01-09 02:45:03

标签: sql sql-server

我有一张桌子。

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

我需要一个select语句来返回具有以下条件的distinct(Name)。

如果产品是2002,则返回'2002',否则返回'*'

这是预期的结果

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

非常感谢任何帮助。

由于 二重

1 个答案:

答案 0 :(得分: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