Function 根据条件求和行数

Function 根据条件求和行数,function,db2,aggregate-functions,recursive-query,Function,Db2,Aggregate Functions,Recursive Query,我使用的是db2数据库(不确定版本)。我的脚本是功能性的,但我没有产生我期望的结果。我需要根据我的案例陈述中的条件将我的总计分为3组,但对于同一项目名称/id和建筑名称/id下的每个项目,我需要每个bucket下的总和,每个project\u name/id和building\u name/id只有一行。我假设某种类型的group by或递归函数将是解决方案,但我不太确定。如果你能朝着正确的方向努力,我将不胜感激。这是我的剧本 SELECT DP.DIM_PROJECT_

我使用的是db2数据库(不确定版本)。我的脚本是功能性的,但我没有产生我期望的结果。我需要根据我的案例陈述中的条件将我的总计分为3组,但对于同一项目名称/id和建筑名称/id下的每个项目,我需要每个bucket下的总和,每个project\u name/id和building\u name/id只有一行。我假设某种类型的group by或递归函数将是解决方案,但我不太确定。如果你能朝着正确的方向努力,我将不胜感激。这是我的剧本

    SELECT
        DP.DIM_PROJECT_ID,
        DP.PROJECT_NAME,
        DM.DIM_BUILDING_ID,
        DM.BUILDING_NAME,
        CASE WHEN ( DJ.GROUPS3 IN ('33.3% <= x <= 100%', '16.7% <= x < 33.3%') AND DA.TYPE_NAME = 'SALES')  
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer) 
        WHEN (DJ.GROUPS3 IN ('60% <= x <= 100%', '20% <= x < 60%') AND DA.TYPE_NAME = 'SALES')
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer) 
        ELSE '0'    
        END as CAPABILITY,      
        CASE WHEN (DJ.GROUPS3 = '0% <= x < 16.7%' AND DA.TYPE_NAME = 'SALES')
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer) 
        WHEN (DJ.GROUPS3 = '0% <= x < 20%' AND DA.TYPE_NAME = 'SALES')
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer) 
        ELSE '0'            
        END as GROUP_1, 
        CASE WHEN (DJ.GROUPS3 = '16.7% <= x < 33.3%' AND DA.TYPE_NAME = 'SALES')
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer) 
        WHEN (DJ.GROUPS3 = '20% <= x < 60%' AND DA.TYPE_NAME = 'SALES') 
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer)     
        ELSE '0'        
        END as GROUP_2,
        CASE WHEN (DJ.GROUPS3 = '33.3% <= x <= 100%' AND DA.TYPE_NAME = 'SALES') 
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer) 
        WHEN (DJ.GROUPS3 = '60% <= x <= 100%' AND DA.TYPE_NAME = 'SALES') 
        THEN cast(sum(cast(FAT.TRANSACTION_AMOUNT as real)) as integer)
        ELSE '0'            
        END as GROUP_3
FROM FACT_TABLE as FAT
RIGHT JOIN DIM_ALLOCATION DA ON FAT.DIM_ALLOCATION_ID = DA.DIM_ALLOCATION_ID
INNER JOIN DIM_PROJECT DP ON FAT.DIM_PROJECT_ID = DP.DIM_PROJECT_ID
INNER JOIN DIM_DATE DD ON FAT.ALLOCATION_START_DATE_DIM_ID = DD.DATE_KEY
INNER JOIN DIM_JOB DJ ON FAT.DIM_JOB_ID = DJ.DIM_JOB_ID
INNER JOIN DIM_BUILDING DM ON FAT.DIM_BUILDING_ID = DM.DIM_BUILDING_ID

WHERE
    DD.DATE_VALUE = '2013'
    AND DA.BUILDING_NAME IN ('ADMIN', 'INVISION')


GROUP BY DM.DIM_BUILDING_ID,
         DP.DIM_PROJECT_ID, 
         DP.PROJECT_NAME,
         CAPABILITY,
         DM.BUILDING_NAME, 
         DJ.GROUPS3,
         DA.TYPE_NAME
ORDER BY DP.PROJECT_NAME
选择
DP.DIM_项目ID,
DP.项目名称,
DM.DIM_建筑标识,
DM.BUILDING_NAME,

案例当(DJ.GROUPS3在('33.3%中)我找到了答案并将其发布在下面

cast(SUM(CASE WHEN DJ.GROUPS3 IN ('33.3% <= x <= 100%', '16.7% <= x < 33.3%')
    THEN cast(FAT.TRANSACTION_AMOUNT as real)
    WHEN DJ.GROUPS3 IN ('60% <= x <= 100%', '20% <= x < 60%')
    THEN cast(FAT.TRANSACTION_AMOUNT as real)
    ELSE NULL
    END)) as integer)  as CAPABILITY,
cast(总和)(DJ.GROUPS3在('33.3%