fix(rx-usage): GROUP BY 구조 개선으로 중복 버그 해결
## 문제 - ORDER BY를 INV_QUAN으로 변경 시 같은 약품이 중복 표시됨 - 예: 수인 30개 주문 → '수인 30, 수인 30' (60개로 잘못 표시) ## 근본 원인 - GROUP BY에 JOIN된 테이블 컬럼(IT.IM_QT_sale_debit, POS.CD_NM_sale) 포함 - IM_total, CD_item_position이 1:N 관계일 때 같은 DrugCode가 여러 행으로 팽창 - GROUP BY가 이 값들을 포함하여 중복 행 유지 ## 해결 - GROUP BY를 P.DrugCode 만으로 축소 (진짜 그룹핑 기준만) - 나머지 컬럼은 MAX() 집계함수 사용 - DrugCode당 정확히 1행 보장 ## 변경 내용 - GROUP BY: 6개 컬럼 → 1개 (P.DrugCode) - SELECT: ISNULL() → MAX(ISNULL()) 래핑 - ORDER BY: INV_QUAN 기준 정렬 (투약량순)
This commit is contained in:
parent
94dea2ab3a
commit
93c643cb8e
@ -5102,15 +5102,15 @@ def api_rx_usage():
|
||||
rx_query = text("""
|
||||
SELECT
|
||||
P.DrugCode as drug_code,
|
||||
ISNULL(G.GoodsName, '알 수 없음') as product_name,
|
||||
ISNULL(G.SplName, '') as supplier,
|
||||
MAX(ISNULL(G.GoodsName, '알 수 없음')) as product_name,
|
||||
MAX(ISNULL(G.SplName, '')) as supplier,
|
||||
SUM(ISNULL(P.QUAN, 1)) as total_qty,
|
||||
SUM(ISNULL(P.INV_QUAN, 0)) as total_dose, -- 총 투약량 (1회복용량 x 복용횟수 x 일수)
|
||||
SUM(ISNULL(P.DRUPRICE, 0)) as total_amount, -- DRUPRICE 합계
|
||||
COUNT(DISTINCT P.PreSerial) as prescription_count,
|
||||
COALESCE(NULLIF(G.BARCODE, ''), '') as barcode,
|
||||
ISNULL(IT.IM_QT_sale_debit, 0) as current_stock,
|
||||
ISNULL(POS.CD_NM_sale, '') as location
|
||||
MAX(COALESCE(NULLIF(G.BARCODE, ''), '')) as barcode,
|
||||
MAX(ISNULL(IT.IM_QT_sale_debit, 0)) as current_stock,
|
||||
MAX(ISNULL(POS.CD_NM_sale, '')) as location
|
||||
FROM PS_sub_pharm P
|
||||
LEFT JOIN PM_DRUG.dbo.CD_GOODS G ON P.DrugCode = G.DrugCode
|
||||
LEFT JOIN PM_DRUG.dbo.IM_total IT ON P.DrugCode = IT.DrugCode
|
||||
@ -5118,8 +5118,8 @@ def api_rx_usage():
|
||||
WHERE P.Indate >= :start_date
|
||||
AND P.Indate <= :end_date
|
||||
AND (P.PS_Type IS NULL OR P.PS_Type != '9')
|
||||
GROUP BY P.DrugCode, G.GoodsName, G.SplName, G.BARCODE, IT.IM_QT_sale_debit, POS.CD_NM_sale
|
||||
ORDER BY SUM(ISNULL(P.QUAN, 1) * ISNULL(P.Days, 1)) DESC
|
||||
GROUP BY P.DrugCode
|
||||
ORDER BY SUM(ISNULL(P.INV_QUAN, 0)) DESC -- 투약량 기준 정렬
|
||||
""")
|
||||
|
||||
rows = mssql_session.execute(rx_query, {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user