pharmacy-pos-qr-system/backend/test_patient_query.py
thug0bin ee300f80ca feat: 소수 환자 약품 뱃지 표시
- 1년간 3명 이하 환자만 사용하는 약품에 환자 이름 뱃지 표시
- 조회 기간 내 사용한 환자는 핑크색으로 강조
- 매출액 컬럼명 변경 (약가 → 매출액)
- SUM(DRUPRICE)로 매출액 계산
2026-03-07 00:43:02 +09:00

49 lines
1.2 KiB
Python

# -*- coding: utf-8 -*-
import pyodbc
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=192.168.0.4\\PM2014;'
'DATABASE=PM_PRES;'
'UID=sa;'
'PWD=tmddls214!%(;'
'TrustServerCertificate=yes;'
'Connection Timeout=10'
)
conn = pyodbc.connect(conn_str, timeout=10)
cur = conn.cursor()
# 최근 1년간 약품별 사용 환자 수 + 3명 이하면 이름 표시
query = """
WITH PatientUsage AS (
SELECT DISTINCT
P.DrugCode,
M.Paname
FROM PS_sub_pharm P
JOIN PS_main M ON P.PreSerial = M.PreSerial
WHERE M.Indate >= CONVERT(VARCHAR, DATEADD(YEAR, -1, GETDATE()), 112)
)
SELECT
PU.DrugCode,
COUNT(*) as patient_count,
STUFF((
SELECT ', ' + PU2.Paname
FROM PatientUsage PU2
WHERE PU2.DrugCode = PU.DrugCode
ORDER BY PU2.Paname
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 2, '') as patient_names
FROM PatientUsage PU
GROUP BY PU.DrugCode
HAVING COUNT(*) <= 3
ORDER BY COUNT(*), PU.DrugCode
"""
cur.execute(query)
rows = cur.fetchall()
print(f"=== 최근 1년 사용 환자 3명 이하 약품 ({len(rows)}개) ===\n")
for row in rows[:20]: # 상위 20개만
print(f"[{row.DrugCode}] {row.patient_count}명: {row.patient_names}")