簡體   English   中英

SQL計數記錄取決於條件

[英]SQL count records depending on criteria

我有一張桌子,上面有每個工作日的帳戶信息。 每條記錄都會顯示該天特定日期的帳戶余額。 我需要創建一個字段,該字段自該特定帳戶的余額為零以來已經運行了多少天。

例如:我有一個號碼為00000001的帳戶。它是在一周前開設的。 數據庫已為該帳戶創建了上一個星期二,星期三,星期四,星期五和星期一的記錄。 直到星期五該帳戶都沒有余額,星期一的余額相同。 我希望該字段顯示為“ 2”。 此外,如果今天余額下降到“ 0”,我需要在下一條記錄上重置計數,如果第二天該帳戶有余額,則需要重新開始計數。 該表中有幾個帳戶,因此我需要分別為每個帳戶工作。

以下是我所得到的:

SELECT
pos.EffDate,
cus.CNA1,
pos.ACNO,
pos.CCY,
pos.LDBL,
pos.LDBLUSD,
MIN(pos3.effdate) AS 'First Post Date',
pos3.Balcount

FROM[dbo].[Account] AS pos
JOIN [dbo].[Customer] AS cus ON ((pos.CNUM=cus.CUST_NO) AND (cus.effdate=pos.effdate))
LEFT JOIN (SELECT pos2.effdate, pos2.ACNO, SUM(CASE pos2.LDBL WHEN 0 THEN 0 ELSE 1 END) AS 'Balcount' FROM [dbo].[Account] AS pos2 GROUP BY pos2.ACNO, pos2.Effdate HAVING pos2.effdate BETWEEN pos2.effdate AND MIN(pos2.effdate)) pos3 ON pos3.ACNO = pos.ACNO
WHERE pos.effdate >='1 Dec 2015' AND pos.Effdate <'30 Dec 2015'
AND pos.srcsys = 'MP_UK'
AND pos.LDBL <= 0
AND pos.CNUM <> '000020'
AND pos.intbear <> 'N'
AND pos.blockdeb IS null

GROUP BY pos.EffDate,cus.CNA1,pos.ACNO,pos.CCY,pos.LDBL,pos.LDBLUSD, pos3.Balcount
ORDER BY 1,2,3

如果您需要我澄清任何事情,請告訴我。 非常感謝所有幫助。

謝謝,本

基本上,您希望根據給定行之前帳戶為零的時間對數據進行分組。 然后,在每個組中,您要枚舉記錄。

在SQL Server 2012+中,您可以使用窗口函數執行這些操作。 我不確定您的示例查詢與該問題有什么關系,但這是基本思想:

select a.*, row_number() over (partition by cust_no, grp order by eff_date) as seqnum
from (select a.*,
             sum(case when balance = 0 then 1 else 0 end) over 
                 (partition by cust_no order by eff_date) as grp
      from Account a
     ) a;

在早期版本的SQL Server中,您可以使用apply非常相似的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM