首页 > 解决方案 > 如何将一个表中的 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

任何人都可以帮忙吗?

标签: sql

解决方案


这种情况的问题是您需要提前知道给定“代码”有多少记录,并且这个数字需要保持不变,否则您最终会得到具有可变列数的结果条目,即不可接受。

但是,如果您知道每个代码最多有两条记录,并且 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;

推荐阅读