У меня есть образец таблицы 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 будет отображаться в соответствующей строке, где Amount соответствует 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
Вот визуальное изображение, будет ли оно help: visual
Также я начинающий. Спасибо!
Дополнительный комментарий: я попытался ниже 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