我有一个查询,我不希望案例陈述包含在Group By中, 但它没有它们就会出错。 请它。
select res.bu_desc,res.product_desc,sum(partcount) as cnt,report_status from (
select bu.bu_desc,prod.Product_desc, count(part_no) as partcount,
CASE
WHEN pd.created_date between '2012-08-01' and '2014-08-01' THEN 'New'
WHEN s.Status_Id>=4 and s.Status_Id<8 THEN 'Backlog'
WHEN pd.analysis_complete_date between '2012-08-01' and '2014-08-01' THEN 'Delivered'
END as report_status
from scn_part_details pd
left join scn_project_details prd on prd.project_id=pd.project_id
left join scn_bu bu on bu.bu_id=prd.bu_id
left join SCN_Product_Name prod on prod.product_id=prd.product_id
left join [dbo].[SCN_CurrentStatus] as cs on cs.[Part_Id_Num]=pd.[Part_Id_Num]
left join [dbo].[SCN_Status] as s on cs.[Part_Status_Id]=s.Status_Id
where prd.group_id=1 and s.Status_Id not in (12)
and pd.created_date between '2012-08-01' and '2014-08-01'
and pd.analysis_complete_date between '2012-08-01' and '2014-08-01'
group by prod.Product_desc,bu.bu_desc,s.Status_Id,pd.created_date,pd.analysis_complete_date
having count(part_no) > 5) as res
group by res.bu_desc,res.product_desc,report_status
group by res.bu_desc,res.product_desc,report_status
我只想查询我的ssrs报告,在那里我会得到零件计数,这些零件是由日期,未完成的零件计数以及成功交付的日期和零件计数创建的。
我想以条形图形式显示报告。
状态是新的,Backlog,已交付。并且所有结果都在查询中获得状态NEW,因为第一种情况适用于所有这些。即所有这些都是创造出来的。结果没有进入第二和第二阶段。
如何解决此问题。?
答案 0 :(得分:0)
为什么需要内部group by
?你不能这样做:
select
res.bu_desc,
res.product_desc,
count(partcount) as cnt,
report_status
from (select
bu.bu_desc,
prod.Product_desc,
part_no,
CASE WHEN pd.created_date between '2012-08-01' and '2014-08-01' THEN 'New'
WHEN s.Status_Id>=4 and s.Status_Id<8 THEN 'Backlog'
WHEN pd.analysis_complete_date between '2012-08-01' and '2014-08-01' THEN 'Delivered'
END as report_status
from scn_part_details pd
left join scn_project_details prd on prd.project_id=pd.project_id
left join scn_bu bu on bu.bu_id=prd.bu_id
left join SCN_Product_Name prod on prod.product_id=prd.product_id
left join [dbo].[SCN_CurrentStatus] as cs on cs.[Part_Id_Num]=pd.[Part_Id_Num]
left join [dbo].[SCN_Status] as s on cs.[Part_Status_Id]=s.Status_Id
where prd.group_id=1 and s.Status_Id not in (12)
and pd.created_date between '2012-08-01' and '2014-08-01'
and pd.analysis_complete_date between '2012-08-01' and '2014-08-01'
) as res
group by
res.bu_desc,
res.product_desc,
res.report_status
答案 1 :(得分:0)
由于我在评论部分做出的所有假设都令人惊讶地证明是正确的(即使我混淆了项目和产品),我可以说以下内容:
话虽如此:有些项目涉及产品零件,您希望查看主项目和产品列表,其中包含每个状态的零件数量。
但是,您的查询中存在一些问题(除了按说明分组而不是ID):
由于您对产品和项目感兴趣,我认为您错误地使用了左连接,而是希望使用内部连接。
select
bu.bu_desc,
prod.product_desc,
case
when pd.analysis_complete_date between '2012-08-01' and '2014-08-01' then 'delivered'
when s.status_id >= 4 and s.status_id < 8 then 'backlog'
else 'new'
end as report_status,
count(*) as partcount
from scn_part_details pd
join scn_project_details prd on prd.project_id = pd.project_id and prd.group_id = 1
join scn_bu bu on bu.bu_id = prd.bu_id
join scn_product_name prod on prod.product_id = prd.product_id
join scn_currentstatus cs on cs.part_id_num = pd.part_id_num
join scn_status s on cs.part_status_id = s.status_id and s.status_id not in (12)
where pd.created_date between '2012-08-01' and '2014-08-01'
group by
bu.bu_desc,
prod.product_desc,
case
when pd.analysis_complete_date between '2012-08-01' and '2014-08-01' then 'delivered'
when s.status_id >= 4 and s.status_id < 8 then 'backlog'
else 'new'
end;