【问题标题】:Combining tables in SQL/QlikView在 SQL/QlikView 中组合表格
【发布时间】:2009-11-16 08:40:03
【问题描述】:

是否可以将 2 个表与连接或类似结构组合在一起,以便一个组中的所有非匹配字段。像这样的一些事情: 所有具有部门名称的员工都会得到他们真正的部门,而所有没有部门的员工最终都在“其他”组中。

部门: SectionDesc ID
第 1 部 500
Dep2 501

员工: 姓名ID
安德斯 500
埃里克 501
根 0

输出: 安德斯 Dep1
埃里克·德普2
根其他

最好的问候安德斯·奥尔梅

【问题讨论】:

    标签: sql qlikview


    【解决方案1】:

    您正在寻找的是外连接:

     SELECT e.name, d.name
     FROM employee e 
     LEFT OUTER JOIN departments d ON e.deptid = d.deptid
    

    这将为每个没有部门的员工提供 NULL 的 d.name。您可以通过以下方式将其更改为“其他”:

    CASE WHEN d.name IS NULL THEN 'Other' Else d.name END 
    

    (存在针对不同 DBMS 的其他更简单的版本,但这应该适用于大多数情况。)

    QlikView 有点棘手,因为默认情况下 QlikView 中的所有联接都是内部联接。在线帮助中有一些关于不同联接的讨论,简短的版本是您可以在读取数据的脚本中基于不同的联接创建一个新表。所以你的脚本中可以有这样的东西:

    Emps: SELECT * FROM EMPLOYEES;
    Deps: SELECT * FROM DEPARTMENTS;
    /* or however else you get your data into QlikView */
    
    EmpDep:
    SELECT Emps.name, Deps.name
    FROM EMPS LEFT JOIN Deps
    

    为了使此连接起作用,连接的列名在两个表中必须相同。 (如有必要,您可以在加载基表时为联接构造新列。)

    【讨论】:

    • 将值替换为 NULL 的更简单方法是 COALESCE():如果 Field 为 NULL,COALESCE(Field, 'Other') 将返回“Other”。有些数据库还有其他功能,但COALESCE 是ANSI 并且在所有真实数据库中都可用(不,Access 不是真实数据库!)。
    猜你喜欢
    • 2018-05-08
    • 2017-10-30
    • 2019-08-06
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多