【问题标题】:Complex SQL join condition to Eliminate the NULL消除 NULL 的复杂 SQL 连接条件
【发布时间】:2021-12-24 06:09:15
【问题描述】:
CREATE TABLE EMP 
(
    E_ID INT,
    E_NAME VARCHAR(20),
    GENDER VARCHAR(20),
    CONTACT INT,
    AGE INT
);

INSERT INTO EMP 
VALUES (1001, 'ABC', 'MALE', NULL, NULL),
       (1001, 'ABC', NULL, 8989, NULL),
       (1001, 'ABC', NULL, NULL, 28);

我尝试了以下查询..但不起作用..

SELECT 
    A.E_ID, B.E_NAME, B.GENDER, B.CONTACT, B.AGE 
FROM 
    EMP AS A 
INNER JOIN 
    ENT AS B ON A.E_ID = B.E_ID 
             AND A.E_NAME = B.E_NAME  
             AND A.GENDER = B.GENDER 
             AND A.CONTACT = A.CONTACT 
WHERE
    A.CONTACT IS NOT NULL;

Employee Table

如何获取非空值的单行输出?

Expected Output

【问题讨论】:

  • E_ID E_Name Gender contact age 1001 ABC MALE 8989 28 我期待这个输出..
  • 我相信这是JOIN 的结果,不是吗?.. 如果是这样,请在加入时控制NULL 的值。
  • 请在您的问题中添加预期的输出(不在 cmets 中)
  • 连接、位置或子查询..但在一行中..
  • 请将数据和代码作为文本而不是图像发布。

标签: sql sql-server


【解决方案1】:

max 这样的聚合函数会忽略nulls,因此一种可能的技巧是按e_ide_name 分组,并将max 应用于其他列:

SELECT   e_id, e_name, MAX(gender), MAX(contact), MAX(age)
FROM     employee
GROUP BY e_id, e_name

【讨论】:

    【解决方案2】:

    MAX() 将不包括NULLs。试试这个:

    SELECT 
          e_id, 
          e_name, 
          MAX(gender) as gender, 
          MAX(age) as age, 
          MAX(contact) as contact
    FROM employee
    GROUP BY e_id, e_name
    

    注意:如果有超过 1 个非空值,请相应地调整代码。否则你可能最终会考虑错误。

    查看db<>fiddle

    中的示例输出

    【讨论】:

    • 请考虑accepting 的答案。和upvote 如果有用的话。 [点击答案旁边的勾号接受]
    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 2014-08-25
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多