Sql 如何使用count(case-when)获取查询返回的帐号计数? 选择DISTINCT s、 分行作为[分行] ,s.CREATEDBYUSER AS[出纳员编号] ,acct.accountnumber为[帐号] ,计数(s.CLOSEDATE为空时的不同大小写) s.CHARGEOFFDATE为空 然后是s.PARENTACCOUNT 其他0 结束 )作为[股份] ,s.CLOSEDATE为空时的情况 s.CHARGEOFFDATE为空 然后是美国的平衡 其他0 终止为[共享余额] ,s.CLOSEDATE为空时的情况 s.CHARGEOFFDATE为空 然后是s型 其他0 结束为[股份类型] ,s.CLOSEDATE为空时的情况 s.CHARGEOFFDATE为空 然后是美国的描述 否则无效 结束为[股份说明] 从ARCUSYM000.dbo.ACCOUNT账户 左连接ARCUSYM000.dbo.s 在acct.ACCOUNTNUMBER=s.PARENTACCOUNT和s.ProcessDate=acct.ProcessDate上 其中acct.CLOSEDATE为空 s.CLOSEDATE为空 s.chargeoffdate为空 和((s.OPENDATE>=@StartDate和s.OPENDATE=@StartDate和acct.OPENDATE
如果您可以将Sql 如何使用count(case-when)获取查询返回的帐号计数? 选择DISTINCT s、 分行作为[分行] ,s.CREATEDBYUSER AS[出纳员编号] ,acct.accountnumber为[帐号] ,计数(s.CLOSEDATE为空时的不同大小写) s.CHARGEOFFDATE为空 然后是s.PARENTACCOUNT 其他0 结束 )作为[股份] ,s.CLOSEDATE为空时的情况 s.CHARGEOFFDATE为空 然后是美国的平衡 其他0 终止为[共享余额] ,s.CLOSEDATE为空时的情况 s.CHARGEOFFDATE为空 然后是s型 其他0 结束为[股份类型] ,s.CLOSEDATE为空时的情况 s.CHARGEOFFDATE为空 然后是美国的描述 否则无效 结束为[股份说明] 从ARCUSYM000.dbo.ACCOUNT账户 左连接ARCUSYM000.dbo.s 在acct.ACCOUNTNUMBER=s.PARENTACCOUNT和s.ProcessDate=acct.ProcessDate上 其中acct.CLOSEDATE为空 s.CLOSEDATE为空 s.chargeoffdate为空 和((s.OPENDATE>=@StartDate和s.OPENDATE=@StartDate和acct.OPENDATE,sql,sql-server,Sql,Sql Server,如果您可以将count(distinct)s相加以获得所需内容(如示例中所示,您可以使用窗口函数: SELECT DISTINCT s.branch AS [Branch] , s.CREATEDBYUSER AS [Teller Number] , acct.accountnumber AS [Account Number] , COUNT( DISTINCT CASE WHEN s.CLOSEDATE is null AND s.CHARGE
count(distinct)
s相加以获得所需内容(如示例中所示,您可以使用窗口函数:
SELECT DISTINCT
s.branch AS [Branch]
, s.CREATEDBYUSER AS [Teller Number]
, acct.accountnumber AS [Account Number]
, COUNT( DISTINCT CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
then s.PARENTACCOUNT
else 0
END
) AS [Shares]
, CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
THEN s.balance
else 0
END AS [SharesBalance]
, CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
THEN s.TYPE
ELSE 0
END AS [Share Type]
, CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
then s.DESCRIPTION
ELSE NULL
END AS [Share Description]
from ARCUSYM000.dbo.ACCOUNT acct
left join ARCUSYM000.dbo.savings s
on acct.ACCOUNTNUMBER = s.PARENTACCOUNT and s.ProcessDate = acct.ProcessDate
where acct.CLOSEDATE is null
AND s.CLOSEDATE is null
AND s.chargeoffdate is null
AND ((s.OPENDATE >= @StartDate AND s.OPENDATE <= @EndDate)
OR (acct.OPENDATE >= @StartDate AND acct.OPENDATE <= @EndDate))
AND acct.memberstatus = 0
AND s.branch is not null
AND s.branch IN (@BranchNum)
AND s.ProcessDate = CONVERT(VARCHAR(8), dateadd(day,-1, getdate()), 112)
AND acct.ProcessDate = CONVERT(VARCHAR(8), dateadd(day,-1, getdate()), 112)
GROUP BY s.BRANCH
, s.CREATEDBYUSER
, acct.ACCOUNTNUMBER
, s.CLOSEDATE
, s.CHARGEOFFDATE
, s.BALANCE
, s.TYPE
, s.DESCRIPTION
, s.SHARECODE
, s.OVERDRAFTTOLERANCE
, s.OPENDATE
ORDER BY s.CREATEDBYUSER, acct.ACCOUNTNUMBER
如果您需要对帐户的所有行进行COUNT(DISTINCT)
计数,那么这就有点复杂了
注意:ELSE 0
带有COUNT(DISTINCT)
似乎可疑。我删除了ELSE
子句。默认值为NULL
,将不被计数。选择q.Branch
SUM(COUNT(DISTINCT CASE WHEN s.CLOSEDATE is null AND s.CHARGEOFFDATE is NULL
THEN s.PARENTACCOUNT
END
)
) OVER (PARTITION BY acct.accountnumber) AS [Shares]
,q.[出纳员编号]
,q.[账号]
,将(q.份额)除以(按q[账号]划分)作为[份额]
,q.SharesBalance
,q.[股份类型]
,q.[股份说明]
从(
选择不同的
s、 分行作为[分行]
,s.CREATEDBYUSER AS[出纳员编号]
,acct.accountnumber为[帐号]
,计数(s.CLOSEDATE为空时的不同大小写)
s.CHARGEOFFDATE为空
和(s.OPENDATE>=@StartDate和s.OPENDATE=@StartDate和s.OPENDATE=@StartDate和acct.OPENDATE
SELECT q.Branch
, q.[Teller Number]
, q.[Account Number]
, COUNT(q.Shares) OVER (PARTITION BY q.[Account Number]) AS [Shares]
, q.SharesBalance
, q.[Share Type]
, q.[Share Description]
FROM(
SELECT DISTINCT
s.branch AS [Branch]
, s.CREATEDBYUSER AS [Teller Number]
, acct.accountnumber AS [Account Number]
, COUNT(DISTINCT CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
AND (s.OPENDATE >= @StartDate AND s.OPENDATE <= @EndDate)
then s.PARENTACCOUNT
END) AS [Shares]
, CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
THEN s.balance
else 0
END AS [SharesBalance]
, CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
THEN s.TYPE
ELSE 0
END AS [Share Type]
, CASE WHEN s.CLOSEDATE is null
AND s.CHARGEOFFDATE is NULL
then s.DESCRIPTION
ELSE NULL
END AS [Share Description]
from ARCUSYM000.dbo.ACCOUNT acct
left join ARCUSYM000.dbo.savings s
on acct.ACCOUNTNUMBER = s.PARENTACCOUNT and s.ProcessDate = acct.ProcessDate
where acct.CLOSEDATE is null
AND s.CLOSEDATE is null
AND s.chargeoffdate is null
AND ((s.OPENDATE >= @StartDate AND s.OPENDATE <= @EndDate)
OR (acct.OPENDATE >= @StartDate AND acct.OPENDATE <= @EndDate))
AND acct.memberstatus = 0
AND s.branch is not null
AND s.branch IN (@BranchNum)
AND s.ProcessDate = CONVERT(VARCHAR(8), dateadd(day,-1, getdate()), 112)
AND acct.ProcessDate = CONVERT(VARCHAR(8), dateadd(day,-1, getdate()), 112)
GROUP BY s.BRANCH
, s.CREATEDBYUSER
, acct.ACCOUNTNUMBER
, s.CLOSEDATE
, s.CHARGEOFFDATE
, s.BALANCE
, s.TYPE
, s.DESCRIPTION
, acct.STATEMENTMAILCODE
, s.SHARECODE
, s.OVERDRAFTTOLERANCE
, s.OPENDATE
, s.PARENTACCOUNT
) q
GROUP BY q.Branch
, q.[Teller Number]
, q.[Account Number]
, q.SharesBalance
, q.Shares
, q.[Share Type]
, q.[Share Description]