2017-08-31 53 views
-2

进出口运行查询SQL服务器 - 分组字段正确

选择

YEAR(TL_SYS_DATE)    AS [YEAR] 
    ,MONTH(TL_SYS_DATE)    AS [MONTH] 
    ,NEW_PRODUCT_NAME    AS [PRODUCT] 
    ,COMP_PDT_CODE     AS PROD_CODE 
    ,NEW_CONTRACT_NO 
    ,NEW_STATUS 
    ,PREMIUM_AMT 

    ,COUNT(DISTINCT CASE WHEN TERM_LENGTH = '10 Year' AND NEW_STATUS IN ('Active/Restrict','Active') THEN 
      NEW_CONTRACT_NO 
    END)           AS [10 YR CONTRACTS] 


    ,SUM(CASE WHEN TERM_LENGTH = '10 Year' AND NEW_STATUS IN ('Active/Restrict','Active') THEN 
      PREMIUM_AMT 
    END)           AS [10 YR Premium] 

    ,SUM(CASE WHEN NEW_STATUS IN ('Surr/Freelook', 'Terminated/Surr','Withdrawn') THEN 
      SURRENDER_VALUE 
    END)           AS [Surr/Term/Withdrawn Amount]  

    ,SUM(CASE WHEN NEW_STATUS NOT IN ('Surr/Freelook', 'Terminated/Surr','Withdrawn') THEN 
      ACCOUNT_VALUE 
    END)           AS [ACCOUNT VALUE] 

    -- NEW_STATUS NOT IN ('Surr/Freelook', 'Terminated/Surr','Withdrawn') AND TERM_LENGTH != '10 Year' 

    ,COUNT(DISTINCT CASE WHEN UPPER(NEW_STATUS) = 'CLAIM' THEN 
      NEW_CONTRACT_NO 
    END)           AS [Death Claim Contracts] 

FROM 
    DB1 
    where YEAR(TL_SYS_DATE) = '2014' 
    and MONTH(TL_SYS_DATE) = '4' 
    AND PREMIUM_AMT > 0 
GROUP BY 
    YEAR(TL_SYS_DATE) 
    ,MONTH(TL_SYS_DATE) 
    ,NEW_PRODUCT_NAME 
    ,ACCOUNT_VALUE  
    ,COMP_PDT_CODE 
    ,NEW_CONTRACT_NO 
    ,NEW_STATUS 
    ,PREMIUM_AMT 

这是导致

Result 1

我想什么做的是总和PREMIUM_AMT但不是ACCOUNT_VALUE

因此对于合同6880000153这将是PREMIUM_AMT = 110500.00和帐户值105306.07全部在一行上。

+0

so put sum(PREMIUM_AMT)and remove PREMIUM_AMT from the group by? –

+0

也使帐户值字段成倍增加。 – user2801881

+0

由于我没有任何表格或数据与我猜测。如果您需要帮助,我们需要一些帮助。这里是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

回答

0

你可以从那里

WITH CTE_Example 
AS 
(
your query 
) 
SELECT MAX(YEAR), 
     MAX(MONTH), 
     NEW_CONTRACT_NO, 
     MAX(NEW_STATUS), 
     SUM(PREMIUM_AMT), 
     MAX([ACCOUNT VALUE]), 
     MAX([Death Claim Contracts]) 
FROM CTE_Example 
GROUP BY NEW_CONTRACT_NO 

所以有些免责声明包装在CTE你的结果和汇总,这将聚集和产生你想要的结果。但是如果不知道整个数据方案,我会怀疑使用MAX(NEW_STATUS)。因为如果6880000153具有Claim和Suspended的组合,它总是会产生Suspended,因为它按字母顺序较大,并且可能不是您需要的。另外,我并没有将[10 YR Premium]和[Surr/Term/Withdrawn Amount]列放入,因为它们是NULL。但随意添加并合适地聚合。