3

我会尽我所能描述,但我很难全神贯注地解决这个问题,更不用说描述它了....

我试图在一个查询中选择多个结果以显示数据库的当前状态。我将第一列作为一种记录类型,将第二列作为第一列的子类别。然后,子类别链接到其下方的更多记录,按状态区分,形成更多列。我需要显示每个主类别/子类别组合,然后在后续列中显示该子类别下方的每个子状态的数量。我已经得到了它,以便我可以显示唯一的组合,但我不确定如何嵌套 select 语句,以便我可以从主查询中选择一个完全不同的表的计数。我的问题在于显示主类别和子类别,我可以从一个表中拉取,但我需要从不同的表中计数。

这就是我所拥有的。计数语句将替换为每个状态的计数:

  SELECT wave_num "WAVE NUMBER",
     int_tasktype "INT / TaskType",
     COUNT (1) total,
     COUNT (1) "LOCKED/DISABLED",
     COUNT (1) released,
     COUNT (1) "PARTIALLY ASSEMBLED",
     COUNT (1) assembled
FROM (SELECT DISTINCT
             (t.invn_need_type || ' / ' || s.code_desc) int_tasktype,
             t.task_genrtn_ref_nbr wave_num
        FROM sys_code s, task_hdr t
       WHERE     t.task_genrtn_ref_nbr IN
                    (SELECT ship_wave_nbr
                       FROM ship_wave_parm
                      WHERE TRUNC (create_date_time) LIKE SYSDATE - 7)
             AND s.code_type = '590'
             AND s.rec_type = 'S'
             AND s.code_id = t.task_type),
     ship_wave_parm swp
GROUP BY wave_num, int_tasktype
ORDER BY wave_num

图片在这里:http: //i.imgur.com/JX334.png

4

3 回答 3

2

猜测一下,关于你的问题和甲骨文(我 - 不幸的是 - 从未使用过),希望它会给你一些想法。很抱歉完全搞乱了你编写 SQL 的方式,SELECT ... FROM (SELECT ... WHERE ... IN (SELECT ...)) 让我很困惑,所以我必须重组:

with tmp(int_tasktype, wave_num) as
(select distinct (t.invn_need_type || ' / ' || s.code_desc), t.task_genrtn_ref_nbr  
 from sys_code s 
 join task_hdr t 
   on s.code_id = t.task_type
 where s.code_type = '590' 
   and s.rec_type = 'S'  
   and exists(select 1 from ship_wave_parm p
              where t.task_genrtn_ref_nbr = p.ship_wave_nbr
                and trunc(p.create_date_time) = sysdate - 7))

select t.wave_num "WAVE NUMBER", t.int_tasktype "INT / TaskType",
       count(*) TOTAL,
       sum(case when sst.sub_status = 'LOCKED'    then 1 end) "LOCKED/DISABLED",
       sum(case when sst.sub_status = 'RELEASED'  then 1 end) RELEASED, 
       sum(case when sst.sub_status = 'PARTIAL'   then 1 end) "PARTIALLY ASSEMBLED",
       sum(case when sst.sub_status = 'ASSEMBLED' then 1 end) ASSEMBLED
from tmp t
join sub_status_table sst
  on t.wave_num = sst.wave_num
group by t.wave_num, t.int_tasktype
order by t.wave_num

如您所见,我对带有子状态的表一无所知。

于 2012-07-25T20:13:02.007 回答
1

您可以使用内连接、分组和计数来获得结果:假设表如下:cat (1)--->(n) subcat (1)----->(n) subcat_detail。所以查询将是:

select cat.title cat_title ,subcat.title subcat_title ,count(*) as cnt from
cat  inner join sub_cat  on cat.id=subcat.cat_id
inner join subcat_detail  on subcat.ID=am.subcat_detail_id
group by cat.title,subcat.title
于 2012-07-25T18:57:41.717 回答
0

一般当你需要不同的计数时,你需要使用 CASE 语句。

select count(*) as total
   , case when field1 = "test' then 1 else 0 end as testcount
   , case when field2 = 'yes' then 1 else 0 endas field2count
FROM table1 
于 2012-07-25T18:57:02.013 回答