T-SQL 서비스 테이블을 결제 테이블에 조인하고 있습니다. payments_rec'd 및 allowed_ 금액에 대해 MAX, AVG를 사용하고 있습니다. PayApp 테이블에서 서비스 별 마지막 줄 번호로 잔액이 필요합니다. 때로는 지불이 나열되고 차감되어 MIN 잔액이 작동하지 않습니다. 인라인 select 문을 생각하고 있지만 인라인 집계 함수를 사용할 수 없습니다.
SELECT DISTINCT [CDCLSVC].[RECNUM]
,[CDCLSVC].[ID]
,[CDCLSVC].[CLIENT_ID]
,[CDCLIENT].[CASE_NUM]
,[CDCLSVC].[UNIT_ID]
,[CDCLSVC].[SUB_UNIT_ID]
,[CDCLSVC].[SVC_ID]
,[CDCLSVC].[EMP_ID]
,[CDCLSVC].[BEG_DATE]
,UPPER([CAEMP].[SORT_NAME]) as Employee
,ISNULL([CDCLSVC].[EXTENDED_PRICE],0) As ExtendedPrice
,ISNULL([CDCLSVC].[BALANCE],0) As Balance
,ISNULL(MAX([CDPAYAPP].[ALLOWED_AMT]),0) AS AllowedAmount
,ISNULL(MAX([CDPAYAPP].[ADJ_AMT]),0)As AdjustedAmount
,ISNULL(SUM([CDPAYAPP].[PAY_APPLIED_AMT]),0)As PaymentApplied
,ISNULL(MAX([CDPAYAPP].[WRITE_OFF_AMT]),0)AS WriteOff
,ISNULL(MIN([CDPAYAPP].[SVC_BALANCE]),0) AS SvcBalance
,UPPER([CDPLACE].[DESC]) as Location
FROM [AnaDEV].[dbo].[CDCLSVC]
INNER JOIN [CAEMP] ON [CDCLSVC].[EMP_ID] = [CAEMP].[ID]
INNER JOIN [CDCLIENT] ON [CDCLSVC].[CLIENT_ID] = [CDCLIENT].[ID]
INNER JOIN [CDPLACE] ON [CDCLSVC].[PLACE_ID] = [CDPLACE].[ID]
INNER JOIN [CDPAYAPP] ON [CDPAYAPP].[CLSVC_ID] = [CDCLSVC].[ID]
WHERE [CDCLSVC].[BEG_DATE] between '2015-07-01' and DATEADD(DAY,-
(DATEPART(DAY, getdate())),GETDATE())
GROUP BY CDCLSVC.RECNUM,CDCLSVC.ID,CDCLSVC.CLIENT_ID,
CDCLIENT.CASE_NUM,CDCLSVC.UNIT_ID, CDCLSVC.SUB_UNIT_ID,
CDCLSVC.SVC_ID,CDCLSVC.EMP_ID, CDCLSVC.BEG_DATE, CAEMP.SORT_NAME,
CDCLSVC.EXTENDED_PRICE,CDCLSVC.BALANCE, [CDPLACE].[DESC]
ORDER BY [CDCLIENT].[CASE_NUM], [CDCLSVC].[ID]
소규모 진료소에 대한 서비스 테이블 (CDCLSVC)이 있습니다. 각 서비스에는 많은 결제 / 조정 (PAYAPP)이 있습니다. 그래서 저는 일대 다 관계를 가지고 있습니다. 또한 임상의와 클라이언트에 대한 다른 조회 테이블이 있습니다. 목표는 Clinician, Client 순으로 서비스를 그룹화하고 서비스 당 하나의 행을 갖는 것입니다. SUM, MIN, MAX를 사용하여 PAYAPP 테이블을 쉽게 집계했습니다. 문제는 PAYAPP 테이블의 잔액이 수표 장과 같았고 마지막 항목이 필요하다는 것입니다.
PAYAPP
ROWNUM SVC PRICE ADJUSTMENT WRITE-OFF PAYMENTS BALANCE
1 001 $100 $25 $75
2 001 $100 $10 $65
3 001 $100 $50 $15
4 001 $100 $15 $0
각 서비스 MAX (PRICE) SUM (조정) MAX (WRITE-OFF) SUM (PAYMENT)
문제는 왼쪽 외부 조인 후 하위 쿼리에서 수행 한 최종 균형을 얻는 것입니다.
SELECT CDCLSVC.ID AS SERVICE_ID
--,CDPAYAPP.[ID] AS CDPAYAPP_ID
,CDCLSVC.[CLIENT_ID]
,CDPAYAPP.[CLSVC_ID]
,ISNULL(CDCLSVC.[EXTENDED_PRICE],0) AS EXTENTED_PRICE
,ISNULL(CDCLSVC.[BALANCE],0) AS BALANCE
,ISNULL(MAX(CDPAYAPP.[ALLOWED_AMT]),0) AS AllowedAmt
,ISNULL(MAX(CDPAYAPP.[ADJ_AMT]),0) AS AdjAmt
,ISNULL(MAX(CDPAYAPP.[WRITE_OFF_AMT]),0)AS WriteOff
,ISNULL(SUM(CDPAYAPP.[PAY_APPLIED_AMT]),0)AS AppliedAmt
,ISNULL(TBL1.SVC_BALANCE,0) AS SVC_BALANCE
,CDCLSVC.[EMP_ID]
,CDCLSVC.[PLACE_ID]
,CDCLSVC.[BEG_DATE]
,CDCLSVC.[UNIT_ID]
,CDCLSVC.[SUB_UNIT_ID]
FROM [AnaDEV].[dbo].[CDCLSVC]
LEFT OUTER JOIN CDPAYAPP
ON CDCLSVC.ID = CDPAYAPP.CLSVC_ID
LEFT OUTER JOIN
(SELECT SVC_BALANCE
,CLSVC_ID
FROM CDPAYAPP
WHERE CDPAYAPP.RECNUM IN
(SELECT MAX([RECNUM])
FROM [AnaDEV].[dbo].[CDPAYAPP]
GROUP BY CLSVC_ID)) AS TBL1
ON TBL1.CLSVC_ID = CDPAYAPP.CLSVC_ID
WHERE [CDCLSVC].[BEG_DATE] between '2015-07-01' and DATEADD(DAY,-(DATEPART(DAY, getdate())),GETDATE())
GROUP BY CDCLSVC.ID,CDCLSVC.[CLIENT_ID],CDPAYAPP.CLSVC_ID,CDCLSVC.
[EXTENDED_PRICE],CDCLSVC.[BALANCE],CDCLSVC.[EMP_ID]
,CDCLSVC.[BEG_DATE],TBL1.SVC_BALANCE, CDCLSVC.PLACE_ID
,CDCLSVC.[UNIT_ID] ,CDCLSVC.[SUB_UNIT_ID]
ORDER BY CDCLSVC.BEG_DATE DESC -- CHECKING THE WHERE CLAUSE
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다