2016-07-04 110 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