在生成多行的 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。
我想从这个 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。