sql - 如何将一个表中的 2 个 sql 行连接到另一个表中
问题描述
我有一个复杂的查询,需要从一个表中获取 2 条记录,如下所示:
code | family | level
111 S1 niv 1
111 2 niv 2
我需要在另一个查询中显示为:
code | family1 | level1 | family2 | level2
111 S1 niv 1 2 niv 2
任何人都可以帮忙吗?
解决方案
这种情况的问题是您需要提前知道给定“代码”有多少记录,并且这个数字需要保持不变,否则您最终会得到具有可变列数的结果条目,即不可接受。
但是,如果您知道每个代码最多有两条记录,并且 DB 引擎支持 CTE 表达式,您可以编写如下内容:
WITH codelist (code,level1,level2) AS
(
SELECT code,min(level),max(level)
FROM yourtable
GROUP BY code
)
SELECT a.code,
b.family,a.level1,
c.family,a.level2
FROM codelist a
LEFT OUTER JOIN yourtable b ON b.code = a.code
AND b.level = a.level1
LEFT OUTER JOIN yourtable c ON c.code = a.code
AND c.level = a.level2
ORDER BY a.code ASC;
推荐阅读
- r - 检查数据框是否在 R 的循环中具有超过 2 个唯一值
- php - 旧内容的超链接缓存
- linux - psql 以前创建的函数在退出后消失了
- docker - 配置文件的变量如何被 docker-compose ENV 替换?
- reactjs - 在 POST 或 DELETE 到数据库之后,如何让 React 从 API 重新获取我的数据?
- linux - ldd 命令如何知道加载了哪个虚拟地址共享库?
- css - CSS 将 url() 用于在其他地方导入文件的资产
- linux - 从动态子目录获取 SOURCES
- python - Jupyter notebook 内核错误:PyInit_win32api
- angular - Angular RxJs 如何等待最终确定 observable?