sql - SQL 在同一个变量上绘制两次
问题描述
我是一个 SQL 新手,我在这方面花了很多时间,但无法破解它。
我的数据库有个人PersonID
作为主键。
一表引用Work_Units
。
Work_Units
可以是该人的常用工作单位,也可以是他们的次要工作单位——两者无关。
我想在 SQL 语句中同时显示一个人的常用工作单位和次要工作单位,这意味着搜索相同的变量Work_Unit
,但从两个不同的表中引用。
我被告知我需要使用子查询,但我无法让它工作 - 子查询是否需要进入SELECT
子句,FROM
子句的WHERE
子句?
TIA,彼得
解决方案
我想有多种方法可以做到这一点。如果您编辑您的问题并包括所涉及表格的布局,这将有所帮助,但我会试一试:
如果您知道子查询将仅返回一行,则可以将子查询放入 SELECT 子句:
SELECT i.NAME,
(SELECT w.WORK_UNIT
FROM WORK_UNITS w
WHERE w.PERSONID = i.PERSONID AND
w.WORK_UNIT_TYPE = 'PRIMARY') AS PRIMARY_WORK_UNIT,
(SELECT w.WORK_UNIT
FROM WORK_UNITS w
WHERE w.PERSONID = i.PERSONID AND
w.WORK_UNIT_TYPE = 'SECONDARY') AS SECONDARY_WORK_UNIT
FROM INDIVIDUALS i
或者如果子查询可以返回多行,您可以将它们加入主查询:
SELECT i.NAME,
pwu.PRIMARY_WORK_UNIT,
swu.SECONDARY_WORK_UNIT
FROM INDIVIDUALS i
INNER JOIN (SELECT w.PERSONID,
w.WORK_UNIT AS PRIMARY_WORK_UNIT
FROM WORK_UNITS w
WHERE w.WORK_UNIT_TYPE = 'PRIMARY') pwu
ON pwu.PERSONID = i.PERSONID
INNER JOIN (SELECT w.PERSONID,
w.WORK_UNIT AS SECONDARY_WORK_UNIT
FROM WORK_UNITS w
WHERE w.WORK_UNIT_TYPE = 'SECONDARY') swu
ON swu.PERSONID = i.PERSONID
或者,如果您真的愿意,可以将辅助工作单元放在一个逗号分隔的列表中:
SELECT i.NAME,
pwu.PRIMARY_WORK_UNIT,
LISTAGG(swu.SECONDARY_WORK_UNIT, ',')
WITHIN GROUP (ORDER BY pwu.PRIMARY_WORK_UNIT) AS SECONDARY_WORK_UNITS
FROM INDIVIDUALS i
INNER JOIN (SELECT w.PERSONID,
w.WORK_UNIT AS PRIMARY_WORK_UNIT
FROM WORK_UNITS w
WHERE w.WORK_UNIT_TYPE = 'PRIMARY') pwu
ON pwu.PERSONID = i.PERSONID
INNER JOIN (SELECT w.PERSONID,
w.WORK_UNIT AS SECONDARY_WORK_UNIT
FROM WORK_UNITS w
WHERE w.WORK_UNIT_TYPE = 'SECONDARY') swu
ON swu.PERSONID = i.PERSONID
GROUP BY i.NAME, pwu.PRIMARY_WORK_UNIT
推荐阅读
- html - xpath 位于
但返回无
- java - Rest Api 解密 GZIP 正文
- javascript - 循环遍历包含对象数组的对象
- apostrophe-cms - 小部件不显示他的内容
- arrays - n维数组的声明
- java - 如何覆盖共享资源,包括依赖项 JAR
- c# - Microsoft.ACE.OLEDB.12.0 提供程序已在本地计算机上注册,但不断收到此错误
- php - Phalcon:注意脚手架生成的视图中的未定义变量(模型和控制器都很好)
- c++ - 如何在支持旧 CPU 的同时在新 CPU 上利用 AVX2?
- mongodb - Spark functions.coalesce 不适用于 mongodb 集合,但适用于 CSV