在select语句中检索一行,生成多行(如果可能,避免使用NULL行)

时间:2015-05-22 09:14:05

标签: sql teradata

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

的输入和预期输出
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'

3 个答案:

答案 0 :(得分:1)

简单的MAX / GROUP BY将返回您的预期结果集:

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

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

答案 1 :(得分:0)

这是朝着正确方向迈出的一步,问题是你仍然会得到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-Server将是这样的: 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

答案 2 :(得分:0)

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

和/或

SELECT
    MAX(name)
FROM
    your_table
WHERE
    number = x

MAX,MIN等都将NULL视为最后一个值;如果所有值都为NULL,则只获得NULL。