2013-04-26 72 views
3

我有下面的代码,我无法弄清楚如何不包含这些到组中。一些论点纯粹是为了这种情况,这就是全部。我不能将它们包含在组中。我不能真正的分组,因为我只需要通过TransactionTyp来获取计数,但我一直得到这个错误:在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。在没有组的情况下使用字段

也许使用CASE是错误的方法去做这件事?但是我需要根据其他字段替换一些值。

这也在MS SQL中。

SELECT Count(*), 
    CASE 
     WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp 
     WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected' 
     WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected' 
     WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate' 
    END As TransactionTyp 
FROM Table1 a 
LEFT JOIN Table2 b 
    ON a.ClaimNbr = b.ClaimDisputeNbr AND b.CreateDte = Convert(varchar,GetDate(), 101) 
WHERE a.ClaimEntryDte = Convert(varchar,GetDate(),101)  
AND a.ClaimTypCd IN ('DEBS', 'DEBSI', 'DBCIN', 'DBCUS') 
GROUP BY TransactionTyp 
+0

这是MS SQL Server的? – 2013-04-26 12:23:02

+0

是的,我的歉意。是的。 – Dulanic 2013-04-26 12:23:27

回答

2

一个问题可能是您无法引用group by子句中的别名。尝试重复case定义在group by

GROUP BY 
    CASE 
     WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp 
     WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected' 
     WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected' 
     WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate' 
    END As TransactionTyp 

或者,使用子查询来定义别名:

select TransactionTyp 
,  count(*) 
from (
     SELECT CASE 
       WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp 
       WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected' 
       WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected' 
       WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate' 
       END As TransactionTyp 
     FROM Table1 a 
     LEFT JOIN 
       Table2 b 
     ON  a.ClaimNbr = b.ClaimDisputeNbr 
       AND b.CreateDte = Convert(varchar,GetDate(), 101) 
     WHERE a.ClaimEntryDte = Convert(varchar,GetDate(),101)  
       AND a.ClaimTypCd IN ('DEBS', 'DEBSI', 'DBCIN', 'DBCUS') 
     ) 
GROUP BY 
     TransactionTyp 
+0

谢谢!我现在明白了。感谢帮助。对SQL还是有点新鲜的东西:) – Dulanic 2013-04-26 12:28:15

0

CASE必须在Group BY声明,而不是ID。

像这样:

GROUP BY CASE 
    WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp 
    WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected' 
    WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected' 
    WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate' 
END 
0

当你到指定从查询返回,结果已经被分组,所以要返回任何已在group by指定。

对此的解决办法是使计算值的子查询,那么你就可以从小组子查询结果:

SELECT Count(*), TransactionTyp 
FROM (
    SELECT 
    CASE 
     WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp 
     WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected' 
     WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected' 
     WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate' 
    END As TransactionTyp 
    FROM Table1 a 
    LEFT JOIN Table2 b 
    ON a.ClaimNbr = b.ClaimDisputeNbr AND b.CreateDte = Convert(varchar,GetDate(), 101) 
    WHERE a.ClaimEntryDte = Convert(varchar,GetDate(),101)  
    AND a.ClaimTypCd IN ('DEBS', 'DEBSI', 'DBCIN', 'DBCUS') 
) as x 
GROUP BY TransactionTyp 
相关问题