如何将一个表中的2个sql行连接到另一个表中

时间:2018-06-06 16:25:14

标签: 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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

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

但是,如果您知道每个代码最多只能有两个记录,并且数据库引擎支持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;

答案 1 :(得分:0)

使用最小和最大聚合功能就足够了:

select max(code) code, 
       max(family) family1, min(level) level1,
       min(family) family2, max(level) level2
  from mytable;

SQL Fiddle Demo