在 SQL/QlikView 中组合表

发布于 2024-08-10 22:24:03 字数 259 浏览 11 评论 0原文

是否可以使用联接或类似结构组合 2 个表,以便将所有不匹配的字段合并到一组中。像这样的事情: 所有具有部门名称的员工都会获得其真正的​​部门,而所有没有部门的员工最终都会进入“其他”组。

部门: 部分描述 ID
出发 1 500
Dep2 501

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

输出: 安德斯第一部
埃里克·德普2
root 其他

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

Is it possible to combine 2 tables with a join or similar construct so that all non matching field in one group. Some thing like this:
All employees with a department name gets their real department and all with no department ends up in group "Other".

Department:
SectionDesc ID
Dep1 500
Dep2 501

Employee:
Name ID
Anders 500
Erik 501
root 0

Output:
Anders Dep1
Erik Dep2
root Other

Best Regards Anders Olme

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

围归者 2024-08-17 22:24:03

您正在寻找的是一个外连接:

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

这将为您提供一个没有部门的每个员工的 d.name NULL。您可以将其更改为“其他”,如下所示:(

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

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

What you are looking for is an outer join:

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

This would give you a d.name of NULL for every employee without a department. You can change this to 'Other' with something like this:

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

(Other, simpler versions for different DBMSs exist, but this should work for most.)

QlikView is a bit tricky, as all joins in QlikView are inner joins by default. There is some discussion in the online help about the different joins, short version is that you can create a new table based on different joins in the script that reads in your data. So you could have something like this in your script:

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

In order for this join to work the column names for the join have to be the same in both tables. (If necessary, you can construct new columns for the join when loading the base tables.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文