简体   繁体   English

基于前一种情况的SQL DB2计数

[英]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: SELECTcase表达式包装在派生表中:

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 我会用JOINGROUP 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM