首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接和空值数据到透视表

连接和空值数据到透视表
EN

Stack Overflow用户
提问于 2015-10-13 11:38:11
回答 2查看 271关注 0票数 1

在SQL方面没有什么问题。我要做的是数一数不同的状态,并将其显示为支点表。代码:

代码语言:javascript
复制
SELECT TAIL_NO,
       isnull(pt.A_GR_ST,0) as A_GR_ST,
       isnull(pt.O_R_LR_FLTS,0)
 FROM (select distinct
                X."Tail_#" as TAIL_NO,
                COUNT(*) as qty,
                X.statuss
         FROM X
        group by X.Tail_#, X.statuss) p    
PIVOT
 (
  MAX([qty])
  FOR [statuss] In([A_GR_ST], [O_R_LR_FLTS])
 ) As pt
order by TAIL_NO

对我来说很完美,并给出了输出:

代码语言:javascript
复制
 TAIL_NO   A_GR_ST    O_R_LR_FLTS
--------- ---------  -------------
 RUD       0          1
 EW        7          2
 ED        100        10 

每个状态号(A_GR_ST,O_R_LR_FLTS)可以按日计数进行更深的分割: 0-1d,2-5d,我想要做的是将这些天拆分到现有的枢轴表中,通过日计数查看拆分状态结果,如果没有,我必须在表中看到零。产出应如下:

代码语言:javascript
复制
 TAIL_NO    DAYS   A_GR_ST   O_R_LR_FLTS
--------- ------- --------- ------------- 
 RUD       0-1d    0         0
 RUD       2-5d    0         1
 EW        0-1d    7         2
 EW        2-5d    0         0
 ED        0-1d    40        3
 ED        2-5d    60        7

怎么做?预先谢谢你。

当我使用代码时:

代码语言:javascript
复制
SELECT TAIL_NO, 
       days,
       isnull(pt.A_GR_ST,0) as A_GR_ST,
       isnull(pt.O_R_LR_FLTS,0)
FROM (select distinct
               X."Tail_#" as TAIL_NO,
               COUNT(*) as qty,
               X.statuss,
               X.days
        FROM X
       group by X.Tail_#, X.statuss, X.days) p
PIVOT
 (
  MAX([qty])
  FOR [statuss] In([A_GR_ST],  [O_R_LR_FLTS])
 ) As pt
order by TAIL_NO

我得到一个输出:

代码语言:javascript
复制
 TAIL_NO    DAYS   A_GR_ST   O_R_LR_FLTS
--------- ------- --------- ------------- 
 RUD       2-5d    0         1
 EW        0-1d    7         2
 ED        0-1d    40        3
 ED        2-5d    60        7

不包括零行。我需要他们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-13 12:14:43

你应该生成你的缺失行。一个国际信息中心将是:

代码语言:javascript
复制
select 
  a.tail_no,
  a.statuss,
  days.days
  nvl(orig.qty, 0) as qty
from 
    (SELECT 
       X."Tail_#" as TAIL_NO, X.statuss
     FROM X
     GROUP BY X.Tail_#, X.statuss
     )a
   cross join (select distinct days from x) days
   left join (
       SELECT 
          X."Tail_#" as TAIL_NO,
          X.statuss,
          X.days,
          COUNT(*) as qty
        FROM X
        GROUP BY X.Tail_#, X.statuss, X.days
        ) orig
       ON a.tail_no = orig.tail_no and a.statuss=orig.statuss and a.days=orig.days

然后继续对此查询进行枢轴查询。

票数 1
EN

Stack Overflow用户

发布于 2015-10-13 13:42:21

通过使用CTE并执行一些联接,可以实现以下目标:

代码语言:javascript
复制
with table_main as (
        SELECT TAIL_NO, DAYS, pt.A_GR_ST, pt.O_R_LR_FLTS
        FROM (select distinct
                      X."Tail_#" as TAIL_NO,
                      COUNT(*) as qty,
                      X.statuss,
                      X.DAYS as DAYS
                      FROM X
                     group by X.Tail_#,X.statuss,X.days) p

                PIVOT
                 (
                  MAX([qty])
                  FOR [statuss] In([A_GR_ST],  [O_R_LR_FLTS])
                    ) As pt
                  order by TAIL_NO),
table_days as (select d.days, t.tail_no from (
                    (select '0-1d' as days union all
                     select '2-5d') d
               cross join (select distinct TAIL_NO from table_main) t))
select td.DAYS, td.TAIL_NO, isnull(tm.A_GR_ST, 0), isnull(tm.O_R_LR_FLTS, 0)
  from table_days td
  left outer join table_main tm
  on tm.DAYS = td.days and tm.TAIL_NO = td.TAIL_NO; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33101702

复制
相关文章

相似问题

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