在生成多行的 select 语句中检索一行(尽可能避免 NULL 行)

Retrieve one row in select statement which generates multiple rows (by avoiding NULL rows if possible)

我想从这个 table 中获取名称,但我只有不唯一的编号。如何获得正确的名称(请给我一些 SQL 语法)? 在数据库 table 下方,您可以看到

的输入和预期输出
Database Table 

Number Name
1      Anna
1      Anna
2      Brad
2      NULL
2      NULL
2      NULL
3      NULL
3      NULL
4      Adam
5      NULL

输入和预期输出:

Number (Input)    Name (Expected outpu)
1                    Anna
2                    Brad
3                    NULL
4                    Adam
5                    NULL

我需要在查询中添加什么才能使其正常工作?

SELECT Name FROM tablename

WHERE Number='chosen number'

这是朝着正确方向迈出的一步,问题是如果你有一行 NULL,你仍然会得到 NULL 如果有一个名字,请告诉我如何过滤掉那些

Mysql 会是这样的: http://sqlfiddle.com/#!9/4beca/1

SELECT DISTINCT Name
FROM mytable
WHERE Number=1 AND Name is not null
UNION 
SELECT NULL
FROM mytable 
LIMIT 1

SQL-服务器是这样的: http://sqlfiddle.com/#!3/f4078/11

SELECT TOP 1 sub.Name
FROM
    (SELECT DISTINCT Name
    FROM mytable
    WHERE Number=1 AND Name is not null
    UNION 
    SELECT NULL AS Name
    FROM mytable) AS sub

一个简单的 MAX/GROUP BY 将 return 您的预期结果集:

SELECT Number, MAX(Name) 
FROM table name
GROUP BY 1;

顺便说一句,NUMBER 是 Teradata 中的保留名称

SELECT
    number,
    MAX(name)
FROM
    your_table
GROUP BY
    number

And/Or

SELECT
    MAX(name)
FROM
    your_table
WHERE
    number = x

MAX、MIN等,都将NULL作为最后一个值;如果所有值都是 NULL,你只会得到 NULL。