[英]SQL DB2 count based on previous case
do someone know a solution for a count based on previous case statement ? 有人知道基于先前案例陈述的计数解决方案吗?
here is what i mean in a query, does not work acutally 这是我在查询中的意思, 无法正常使用
SELECT
CASE
WHEN field1 IN ('a','b','c') THEN 'MATCH1'
WHEN field2 IN ('d','e','f') THEN 'MATCH2'
ELSE 'NOMATCH' END AS MATCHFIELD,
(SELECT COUNT(*) FROM TABLE2 WHERE field3=MATCHFIELD) AS SUBCOUNT
FROM TABLE1
i am on db2 v9.X. 我在db2 v9.X上。 i have tryed HAVING but could not find a viable solution
我已经tryed HAVING,但无法找到一个可行的解决方案
regards 问候
Wrap the SELECT
with the case
expression up in a derived table: 将
SELECT
与case
表达式包装在派生表中:
select MATCHFIELD,
(SELECT COUNT(*) FROM TABLE2 WHERE field3=MATCHFIELD) AS SUBCOUNTSELECT
from
(
select
CASE
WHEN field1 IN ('a','b','c') THEN 'MATCH1'
WHEN field2 IN ('d','e','f') THEN 'MATCH2'
ELSE 'NOMATCH'
END AS MATCHFIELD
FROM TABLE1
) dt
I would use JOIN
and GROUP BY
我会用
JOIN
和GROUP BY
SELECT MATCHFIELD, COUNT(*)
FROM TABLE2
JOIN
(
SELECT
CASE
WHEN field1 IN ('a','b','c') THEN 'MATCH1'
WHEN field2 IN ('d','e','f') THEN 'MATCH2'
ELSE 'NOMATCH' END AS MATCHFIELD
FROM TABLE1
) t ON field3=t.MATCHFIELD
GROUP BY MATCHFIELD
try this : 尝试这个 :
with tmp as (
SELECT CASE
WHEN field1 IN ('a','b','c') THEN 'MATCH1'
WHEN field2 IN ('d','e','f') THEN 'MATCH2'
ELSE 'NOMATCH' END AS MATCHFIELD
FROM TABLE1
)
select tmp.*, (SELECT COUNT(*) FROM TABLE2 WHERE field3=MATCHFIELD) AS SUBCOUNT
from tmp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.