[英]Not a single-group group function while using case when statements
In a query I am trying to use case when keywords. 在查询中,我尝试使用关键字关键字时的大小写。 I have to check for 3 conditions there.
我必须在那里检查3个条件。 But I am getting Not a single-group group function error.
但是我收到了“不是单组分组函数错误”的提示。 Any syntax error in my query?
查询中是否存在语法错误? Please guide.
请指导。
Query is 查询为
SELECT
CASE WHEN DIST_TYPE_ID IN (5033,5034,5035,5036)
THEN MIN (b2b_start_dt +NVL(access_lead_Days,0))
ELSE
CASE WHEN MAX(overridden) = 0
THEN NVL (MIN (src_start_dt), MIN (b2b_start_dt))
ELSE MAX(B2B_START_dT) END
END as start_date
FROM prog_access_movie_v
WHERE trunc(SYSDATE) BETWEEN b2b_start_dt AND b2b_end_dt
AND (user_id IS NOT NULL OR GROUP_ID IS NOT NULL)
AND dist_type_id IN (5034) AND prog_id = (432899)
This is the select
: 这是
select
:
SELECT (CASE WHEN DIST_TYPE_ID IN (5033, 5034, 5035, 5036)
THEN MIN(b2b_start_dt + NVL(access_lead_Days, 0))
ELSE (CASE WHEN MAX(overridden) = 0
THEN NVL(MIN(src_start_dt), MIN(b2b_start_dt))
ELSE MAX(B2B_START_dT)
END)
END) as start_date
In terms of aggregation, everything is fine except for the condition on DIST_TYPE_ID
. 就聚合而言,除了
DIST_TYPE_ID
上的条件之外,一切都很好。 If you had: 如果你有:
SELECT (CASE WHEN MAX(DIST_TYPE_ID) IN (5033, 5034, 5035, 5036)
THEN MIN(b2b_start_dt + NVL(access_lead_Days, 0))
ELSE (CASE WHEN MAX(overridden) = 0
THEN NVL(MIN(src_start_dt), MIN(b2b_start_dt))
ELSE MAX(B2B_START_dT)
END)
END) as start_date
Or: 要么:
SELECT (CASE WHEN SUM(CASE WHEN DIST_TYPE_ID IN (5033, 5034, 5035, 5036) THEN 1 ELSE 0 END) > 0
THEN MIN(b2b_start_dt + NVL(access_lead_Days, 0))
ELSE (CASE WHEN MAX(overridden) = 0
THEN NVL(MIN(src_start_dt), MIN(b2b_start_dt))
ELSE MAX(B2B_START_dT)
END)
END) as start_date
Or a myriad of other possibilities, then the query should parse and execute. 或无数其他可能性,则查询应解析并执行。
It was a silly mistake from me . 我这是一个愚蠢的错误。 Group by dist_type_id worked out.
按dist_type_id分组。
SELECT CASE WHEN DIST_TYPE_ID IN (5033,5034,5035,5036) THEN MIN (b2b_start_dt +NVL(access_lead_Days,0))
ELSE CASE WHEN MAX(overridden) = 0 THEN NVL (MIN (src_start_dt), MIN (b2b_start_dt)) ELSE MAX(B2B_START_dT) END END as start_date
FROM prog_access_movie_v
WHERE trunc(SYSDATE) BETWEEN b2b_start_dt AND b2b_end_dt
AND (user_id IS NOT NULL OR GROUP_ID IS NOT NULL)
AND dist_type_id IN (5034) AND prog_id = (432899)
group by access_lead_days, dist_type_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.