我有一个复杂的查询,需要从一个表中获取2条记录,如下所示:
code | family | level
111 S1 niv 1
111 2 niv 2
我需要在另一个查询中出现:
code | family1 | level1 | family2 | level2
111 S1 niv 1 2 niv 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;