2017-08-31 68 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。但隨意添加併合適地聚合。