sql - SQL Server - 如何从具有多个条件的不同行中获取值?
问题描述
我有一个样本表 TempT:
Amount | ChargeID | IDPaymentItem | rCode | rCodeAmt | IDPayment | eDate
0.00 | 530064 | 1236182 | PR1 | 251.10 | 769630 | 04/07/2020
0.00 | 530064 | 1236182 | PR45 | 2238.90 | 769630 | 04/07/2020
188.33 | 530064 | 1240623 | CO45 | 2238.90 | 771802 | 04/30/2020
188.33 | 530064 | 1240623 | PR2 | 62.77 | 771802 | 04/30/2020
2238.90 | 530064 | 1240624 | | 0.00 | 771803 | 04/30/2020
我想创建另一个表,其中 rCode 将显示在金额与 rCodeAmt、ChargeID 和 eDate 匹配的相应行上。
这是我到目前为止的代码,我被卡住了:
DECLARE @From DATETIME
DECLARE @To DATETIME
SET @From = '{Enter starting date range: <!DATE!>}'
SET @To = '{Enter ending date range: <!DATE!>} 23:59:59'
SELECT
pi.Amount,
pi.ChargeID,
pi.IDPaymentItem,
pi.PatientID,
SUBSTRING(Value,0,CHARINDEX('=',Value)) AS rCode,
CAST(CAST(SUBSTRING(Value,CHARINDEX('=',Value) + 1,999999) AS FLOAT) AS DECIMAL(30,2)) AS rCodeAmt,
p.IDPayment,
p.eDate,
p.PaymentTypeID,
p.sDate
INTO #TempT
FROM PaymentItem pi
CROSS APPLY STRING_SPLIT(ReasonCodes,',')
INNER JOIN Payment p on p.IDPayment = pi.PaymentID
WHERE p.eDate BETWEEN @From AND @To
ORDER BY pi.ChargeID
SELECT
pi.Amount,
pi.ChargeID,
pi.IDPaymentItem,
pi.PatientID,
t.rCode,
t.rCodeAmt,
p.IDPayment,
p.eDate,
p.PaymentTypeID,
p.sDate
FROM PaymentItem pi
INNER JOIN Payment p ON p.IDPayment = pi.PaymentID
FULL OUTER JOIN #TempT t ON (t.rCodeAmt = pi.Amount
AND t.ChargeID = pi.ChargeID)
WHERE p.eDate BETWEEN @From AND @To
ORDER BY pi.ChargeID,p.IDPayment
DROP TABLE #TempT
这是结果(满足的条件:rCodeAmt 和 ChargeID)。
Amount | ChargeID | IDPaymentItem | rCode | rCodeAmt | IDPayment | eDate
0.00 | 530064 | 1236182 | | | 769630 | 04/07/2020
188.33 | 530064 | 1240623 | | | 771802 | 04/30/2020
2238.90 | 530064 | 1240624 | CO45 | 2238.90 | 771803 | 04/30/2020
2238.90 | 530064 | 1240624 | PR45 | 2238.90 | 771803 | 04/30/2020
我不知道如何插入第三个标准(eDate)。
我希望结果是:
Amount | ChargeID | IDPaymentItem | rCode | rCodeAmt | IDPayment | eDate
0.00 | 530064 | 1236182 | | | 769630 | 04/07/2020
188.33 | 530064 | 1240623 | | | 771802 | 04/30/2020
2238.90 | 530064 | 1240624 | CO45 | 2238.90 | 771803 | 04/30/2020
如果有帮助,这是一个视觉效果:视觉
我的专长也是初学者。谢谢!
附加评论:我尝试在 FROM/JOIN 下面添加第三个条件(eDate),它确实返回三行,但 rCode 值变为空。
FROM PaymentItem pi
INNER JOIN Payment p ON p.IDPayment = pi.PaymentID
FULL OUTER JOIN #TempT t ON (t.rCodeAmt = pi.Amount
AND t.ChargeID = pi.ChargeID
AND t.eDate = p.eDate)
样本:
Amount | ChargeID | IDPaymentItem | rCode | rCodeAmt | IDPayment | eDate
0.00 | 530064 | 1236182 | null | null | 769630 | 04/07/2020
188.33 | 530064 | 1240623 | null | null | 771802 | 04/30/2020
2238.90 | 530064 | 1240624 | null | null | 771803 | 04/30/2020
解决方案
我认为以下内容应该适合您-但是,您在#tempt 中提供的示例数据与屏幕截图不匹配/缺少某些列,因此无法使用这些附加列进行测试...但是以下内容有效退回您的要求!
create table #tempt (
Amount float
,ChargeID int
,IDPaymentItem int
,rCode varchar(10)
,rCodeAmt float
,IDPayment int
,eDate date
);
insert into #tempt select '0','530064','1236182','PR1','251.1','769630','2020-04-07'
insert into #tempt select '0','530064','1236182','PR45','2238.9','769630','2020-04-07'
insert into #tempt select '188.33','530064','1240623','CO45','2238.9','771802','2020-04-30'
insert into #tempt select '188.33','530064','1240623','PR2','62.77','771802','2020-04-30'
insert into #tempt select '2238.9','530064','1240624','','0','771803','2020-04-30'
----------------
--FINAL SELECT--
----------------
select distinct
t.Amount
,t.ChargeID
,t.IDPaymentItem
--,t.PatientID
,t1.rCode
,t1.rCodeAmt
,t.IDPayment
,t.eDate
--,t.PaymentTypeID
--,t.sDate
from
#tempt t
left outer join #tempt t1
on t.amount = t1.rCodeAmt
and t.chargeid = t1.chargeid
and t.edate = t1.edate
推荐阅读
- authentication - 如何写入 CakePHP 3.8 新的身份验证插件会话
- mongoose - NestJS 错误:错误:Nest 无法解析 AuthService (?, JwtService) 的依赖项
- python - Python - 提取文本下一个兄弟
- r - 如何保存函数的输出?
- c# - 如何让控制台给出随机数 1-10 C# Unity?
- c# - 如何使用 C# 执行 PowerShell 脚本
- r - 子集行包含某些列的 NA
- pascal - 随机在循环内无法正常工作
- docker - 使用 Dockerfile 复制文件
- ruby-on-rails - 如何将一个大的 rspec 文件分成更小的部分