2016-07-04 86 views
0

我有inovices一张桌子和一个名为Arrers天领域,我需要计算有多少项目是为0-30天也30-90和90-120SQL查询来总结桶

基本上我需要什么是为了计算我的客户组合的老化。

到目前为止,我有这样的:

SELECT SUM(CASE WHEN Receivable.Arrers>'0'<'30' THEN 1 ELSE 0) AS 0-30, 
     SUM(CASE WHEN Receivable.Arrers<'30'>'60' THEN 1 ELSE 0) AS 30-60, 
     SUM(CASE WHEN Receivable.Arrers<'90'>'120' THEN 1 ELSE 0) AS 90-120 
From Receivable 

表名账款

Invoice Arrers  
89859  10 
89856  3 
89853  11 

回答

1

访问SQL不支持CASE WHEN。您可以改为使用IIf表达式。

SELECT 
    SUM(IIf(r.Arrers BETWEEN 0 AND 30, 1, 0)) AS [0-30], 
    SUM(IIf(r.Arrers BETWEEN 31 AND 60, 1, 0)) AS [31-60], 
    SUM(IIf(r.Arrers BETWEEN 90 AND 120, 1, 0)) AS [90-120] 
FROM Receivable AS r; 

的例子在你的问题忽略Arrers从61到89,所以我做了。但是如果需要,你可以添加另一个列表达式。

如果Arrers是文字而不是数字类型,你可以用Val()投文本值数...

SUM(IIf(Val(r.Arrers) BETWEEN 0 AND 30, 1, 0)) AS [0-30] 
+0

如果我理解正确的话,这是你现在想要什么:'SUM(IIF( r.Arrers介于0和30之间,r.AmountLC,0))' – HansUp

+0

感谢这工作就像一个魅力:) yeah ai取代也1到r.AmountLC得到报告中的挂件 –

+0

哦,我错过了'ms -access'标签。 +1在这里 – Jcl

1

您可以尝试一个

SELECT 
     SUM(CASE WHEN Receivable.Arrers BETWEEN 0 AND 30 THEN 1 ELSE 0) AS '0-30', 
     SUM (CASE WHEN Receivable.Arrers BETWEEN 30 AND 60 THEN 1 ELSE 0) AS '30-60', 
     SUM (CASE WHEN Receivable.Arrers BETWEEN 90 AND 120 THEN 1 ELSE 0) AS '90-120', 
     arrers 
FROM Receivable 
GROUP BY arrers 

1东西需要检查。

  1. 我已经把BETWEEN 90 AND 120我整数考虑。如果它们是varchar,则需要将它们转换为整数。 Val(Receivable.Arrers)将做访问的伎俩。请让我知道,如果有什么不清楚
1

你是在正确的轨道上,除了可能的CASE语句语法....尝试没有集团安迪的回答通过

(没有足够的点张贴作为评论)

1

我会使用这样的:

SELECT subq.ArrersGroup, COUNT(*) 'Count' 
FROM 
(
SELECT 
    CASE 
    WHEN R.Arrers < 30 THEN '0-30' 
    WHEN R.Arrers < 90 THEN '30-90' 
    WHEN R.Arrers < 120 THEN '90-120' 
    ELSE 'Other' 
    END ArrersGroup 
FROM Receivable R 
) subq 
GROUP BY subq.ArrersGroup 

SqlFiddle