我会尽力描述,但是我很难全心全意地解决这个问题,更不用说描述它了....
我试图在一个查询中选择多个结果以显示数据库的当前状态。我将第一列作为一种记录类型,将第二列作为第一列的子类别。然后将子类别链接到其下的更多记录,按状态区分,形成多个列。我需要显示每个主要类别/子类别组合,然后显示后续列中该子类别下面每个子状态的数量。我已经得到它,以便我可以显示唯一的组合,但我不知道如何嵌套select语句,以便我可以从主查询中选择一个完全不同的表的计数。我的问题在于,要显示主类别和子类别,我可以从一个表中提取,但我需要从另一个表中计算。任何有关此事的想法都将受到高度赞赏
这就是我所拥有的。 count语句将替换为每个状态的计数:
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
答案 0 :(得分: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
正如您所注意到的那样,我对子表的表格一无所知。
答案 1 :(得分: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
答案 2 :(得分:-1)
通常,当您需要不同的计数时,需要使用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