如何为以下查询使用 case 表达式
How to use case expression for the below query
我有包含以下信息的数据:
AcctNumber VisitID TxnType TxnJournal TxnSvcDate TxnBchDate TxnNonChgCode TxnAmount TxnCount TxnInsurance ChgTotal
-------------------------------------------------------------------------------------------------------------------------------
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -181.22 1 SP 3386.6
csc V123456789 PAY CASUCL 2/9/2019 2/9/2019 CHECK -175.48 1 SP 3386.6
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -68.06 1 SP 3386.6
但我需要如下所示的结果,您可以在其中看到所有列都相同,除了以下结果中的费用总额,我希望这些费用仅针对相同的 VisitID
或 AccountNumber
并剩余填充为零,让我知道我们如何通过查询解决这个问题。
AcctNumber VisitID TxnType TxnJournal TxnSvcDate TxnBchDate TxnNonChgCode TxnAmount TxnCount TxnInsurance ChgTotal
-------------------------------------------------------------------------------------------------------------------------------
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -181.22 1 SP 3386.6
csc V123456789 PAY CASUCL 2/9/2019 2/9/2019 CHECK -175.48 1 SP 0
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -68.06 1 SP 0
tiny image
在内部查询中,我在 AcctNumber 列上添加了一个 Row_Number 函数。
此函数将 return 行号按 AcctNumber 分组。因此,您将从每个 AcctNumber 的 1 开始。在外部查询中,我添加了一个 Case When 来获取基于 ROw Number 的 ChgTotal。
SELECT
AcctNumber, VisitID, TxnType, TxnJournal, TxnSvcDate, TxnBchDate,
TxnNonChgCode, TxnAmount, TxnCount, TxnInsurance, ChgTotal,
CASE
WHEN RowNumber = 1 THEN ChgTotal ELSE 0
END
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY AcctNumber ORDER BY AcctNumber) RowNumber,
AcctNumber, VisitID, TxnType, TxnJournal, TxnSvcDate, TxnBchDate,
TxnNonChgCode, TxnAmount, TxnCount, TxnInsurance, ChgTotal
FROM
YOUR_TABLE_NAME) AS A
我有包含以下信息的数据:
AcctNumber VisitID TxnType TxnJournal TxnSvcDate TxnBchDate TxnNonChgCode TxnAmount TxnCount TxnInsurance ChgTotal
-------------------------------------------------------------------------------------------------------------------------------
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -181.22 1 SP 3386.6
csc V123456789 PAY CASUCL 2/9/2019 2/9/2019 CHECK -175.48 1 SP 3386.6
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -68.06 1 SP 3386.6
但我需要如下所示的结果,您可以在其中看到所有列都相同,除了以下结果中的费用总额,我希望这些费用仅针对相同的 VisitID
或 AccountNumber
并剩余填充为零,让我知道我们如何通过查询解决这个问题。
AcctNumber VisitID TxnType TxnJournal TxnSvcDate TxnBchDate TxnNonChgCode TxnAmount TxnCount TxnInsurance ChgTotal
-------------------------------------------------------------------------------------------------------------------------------
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -181.22 1 SP 3386.6
csc V123456789 PAY CASUCL 2/9/2019 2/9/2019 CHECK -175.48 1 SP 0
csc V123456789 PAY CASUCL 2/8/2019 2/8/2019 CHECK -68.06 1 SP 0
tiny image
在内部查询中,我在 AcctNumber 列上添加了一个 Row_Number 函数。 此函数将 return 行号按 AcctNumber 分组。因此,您将从每个 AcctNumber 的 1 开始。在外部查询中,我添加了一个 Case When 来获取基于 ROw Number 的 ChgTotal。
SELECT
AcctNumber, VisitID, TxnType, TxnJournal, TxnSvcDate, TxnBchDate,
TxnNonChgCode, TxnAmount, TxnCount, TxnInsurance, ChgTotal,
CASE
WHEN RowNumber = 1 THEN ChgTotal ELSE 0
END
FROM
(SELECT
ROW_NUMBER() OVER (PARTITION BY AcctNumber ORDER BY AcctNumber) RowNumber,
AcctNumber, VisitID, TxnType, TxnJournal, TxnSvcDate, TxnBchDate,
TxnNonChgCode, TxnAmount, TxnCount, TxnInsurance, ChgTotal
FROM
YOUR_TABLE_NAME) AS A