1

我在下面有一张桌子。

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

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

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

这是预期的结果

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

任何帮助将不胜感激。

谢谢妮居

4

1 回答 1

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

但是,如果您的实际表中的值不仅仅是 2002or *,并且您想要返回 2002 的值而不是最大的数字,请使用 aCASE分隔出您想要的值 (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

于 2013-01-09T02:48:07.150 回答