首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将秩()前2的结果改进为唯一的列

如何将秩()前2的结果改进为唯一的列
EN

Stack Overflow用户
提问于 2017-06-26 15:46:59
回答 2查看 52关注 0票数 0

下面是为在自己的列中显示结果1和2而编写的SQL 9(i)代码。有更有效的方法来写这个吗?

代码语言:javascript
复制
select 
  sc1.COIL as COIL1
, sc1.DEFECT as DEFECT1
, sc2.DEFECT as DEFECT2
FROM
      (select
            COIL, DEFECT
            , RANK() OVER(PARTITION BY COIL ORDER BY WEIGHT DESC) RNK
            from NOVELIS.F406, NOVELIS.F408 where   F406_DEFECT_CODE = F408_REJECT_CODE
            GROUP BY COIL, DEFECT
        )sc1
    , (select
            COIL, DEFECT
            , RANK() OVER(PARTITION BY COIL ORDER BY WEIGHT DESC) RNK
            from NOVELIS.F406, NOVELIS.F408 where   F406_DEFECT_CODE = F408_REJECT_CODE
            GROUP BY COIL, DEFECT
        )sc2

WHERE 
sc1.RNK = 1 
and sc2.RNK = 2 
and sc1.COIL = sc2.COIL 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-26 15:50:27

可以使用条件聚合并使用1派生表。

代码语言:javascript
复制
SELECT    sc1.COIL AS COIL1,
          MAX(CASE WHEN RNK = 1 THEN sc1.DEFECT END) AS DEFECT1,
          MAX(CASE WHEN RNK = 2 THEN sc1.DEFECT END) AS DEFECT2
FROM
(
    SELECT COIL,
           DEFECT,
           RANK() OVER(PARTITION BY COIL ORDER BY WEIGHT DESC) RNK
    FROM   NOVELIS.F406
           --practice using joins
           INNER JOIN NOVELIS.F408 ON F406_DEFECT_CODE = F408_REJECT_CODE
    --not sure you need the group by here
) sc1
GROUP BY sc1.COIL
票数 1
EN

Stack Overflow用户

发布于 2017-06-26 15:55:57

为避免两次阅读表格,只需阅读一次,并将结果转出来:-

代码语言:javascript
复制
select 
coil,
max (case when rnk=1 then defect else null end) defect1,
max (case when rnk=2 then defect else null end) defect2
FROM (
select 
COIL, DEFECT, 
RANK() OVER(PARTITION BY COIL ORDER BY WEIGHT DESC) RNK
from NOVELIS.F406
inner join NOVELIS.F408 on F406_DEFECT_CODE = F408_REJECT_CODE
) sc
WHERE 
sc.RNK <= 2 

group by coil
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44763551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档