2017-09-11 2 views
0

Est-ce que quelqu'un connaît une solution de comptage basée sur l'instruction de cas précédente?Compte SQL DB2 basé sur le cas précédent

ici est ce que je veux dire dans une requête, ne fonctionne pas 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  

je suis sur db2 v9.X. i tryed PRESENTANT mais n'a pas pu trouver une solution viable

ce qui a trait

Répondre

3

Enroulez le SELECT avec l'expression case dans une table dérivée:

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 
+0

merci beaucoup! fonctionne comme supposé :) – user982998

1

J'utiliseraient JOIN et 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 
+0

merci beaucoup aussi! cela fonctionne bien aussi :) – user982998

+0

vous êtes les bienvenus :) –

1

t ry ceci:

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