无法在内部sql查询中使用case语句

无法在内部sql查询中使用case语句,sql,Sql,从下面的sql中,我可以得到状态和平均生产计数的输出 我的问题是,当account_num='A128'或'A126'时,我需要使用 “(dpc.product\u id=cpp.product\u id或dpc.product\u id=999)”。我尝试使用case语句。我是sql新手,无法获取输出。请任何人对此提供帮助 Cpp表是 帐号 包装标识 产品标识 选择平均状态 SUM(avg.AVG_PROD_COUNT) AVG_PROD_COUNT FROM (SELECT DECOD

从下面的sql中,我可以得到状态和平均生产计数的输出

我的问题是,当account_num='A128'或'A126'时,我需要使用
“(dpc.product\u id=cpp.product\u id或dpc.product\u id=999)”。我尝试使用case语句。我是sql新手,无法获取输出。请任何人对此提供帮助

Cpp表是 帐号

包装标识

产品标识


选择平均状态

SUM(avg.AVG_PROD_COUNT) AVG_PROD_COUNT
FROM
(SELECT
  DECODE(dpc.product_id,999,'SUSPEND','ACTIVE') status,
  dpc.product_id,
  dpc.package_id,
  ROUND(SUM(dpc.product_count)/ (to_date( '$billDate' ,'YYYYMMDD') - add_months(to_date( '$billDate' ,'YYYYMMDD'), -1)), 2) AVG_PROD_COUNT
FROM dailyproductcount dpc,      
  cust_pkg_prod cpp
WHERE dpc.rating_acct_nbr = cpp.account_num   
AND dpc.rating_acct_nbr not in('A128','A126') 
AND dpc.activity_dat BETWEEN add_months(to_date( '$billDate' ,'YYYYMMDD'), -1) AND to_date( '$billDate' ,'YYYYMMDD')-1
AND (dpc.product_id = cpp.package_id
OR dpc.product_id   =999) 
AND dpc.package_id  = cpp.package_id
GROUP BY dpc.product_id,
  dpc.package_id
) AVG

你的逻辑有错误或者可能是打字错误-

(dpc.product_id = cpp.package_id
OR dpc.product_id   =999) 
AND dpc.package_id  = cpp.package_id
在功能上等同于

dpc.package_id  = cpp.package_id
这可以防止
dpc.product_id=999
导致您的
where
子句计算为true

  • 由于父查询中没有“GROUP BY avg.status”,上述sql将无法工作

  • 据我所知,在WHERE条件下,您需要类似的东西(我假设您使用Oracle):


    其中dpc.rating\u acct\u nbr=cpp.account\u num
    和dpc.activity日期介于添加月份(截止日期('$billDate','YYYYMMDD'),-1)和截止日期('$billDate','YYYYMMDD')-1之间
    和dpc.package_id=cpp.package_id
    和(dpc.product\U id=999或dpc.product\U id=decode(dpc.rating\U acct\U nbr'A126',cpp.product\U id'A128',cpp.product\U id,cpp.package\U id)

  • 如果要使用用例,则条件
    “产品id=解码(dpc.rating\u acct\u nbr,'A126',cpp.product\u id,'A128',cpp.product\u id,cpp.package\u id)”将如下所示:

    product_id = case when dpc.rating_acct_nbr in ('A126', 'A128') then cpp.product_id else cpp.package_id end
    

    从功能上讲,这是正确的,我需要根据帐户编号进行评估,如果是“A128”或“A126”,那么我需要根据产品id而不是包装id进行匹配。非常感谢您的帮助。。我能看到输出。user3274607你能描述一下它在你的结构方面意味着什么吗?“同时获取“活动”和“挂起”