1-- Step 1: Build the grouped counts into a temp table2SELECT sex,3 CASE4 WHEN Calculated_Age < 30 THEN '<30'5 WHEN Calculated_Age BETWEEN 30 AND 39 THEN '30-39'6 WHEN Calculated_Age BETWEEN 40 AND 49 THEN '40-49'7 ELSE '50+'8 END AS AgeGroup,9 COUNT(DISTINCT PROCHI) AS PatientCount10INTO #temp11FROM Project_12345..Demography_Current12GROUP BY sex,13 CASE14 WHEN Calculated_Age < 30 THEN '<30'15 WHEN Calculated_Age BETWEEN 30 AND 39 THEN '30-39'16 WHEN Calculated_Age BETWEEN 40 AND 49 THEN '40-49'17 ELSE '50+'18 END19 20-- Step 2: Pivot to wide format21SELECT AgeGroup,22 SUM(IIF(sex = 'M', PatientCount, 0)) AS Male,23 SUM(IIF(sex = 'F', PatientCount, 0)) AS Female24FROM #temp25GROUP BY AgeGroup26 27-- Clean up28DROP TABLE #temp
1with engine.connect() as conn:2 df = pd.read_sql("""3 SELECT sex, Calculated_Age, PROCHI4 FROM Project_12345..Demography_Current5 """, conn)6 7bins = [0, 30, 40, 50, 200]8labels = ["<30", "30-39", "40-49", "50+"]9df["AgeGroup"] = pd.cut(df["Calculated_Age"], bins=bins, labels=labels, right=False)10 11pivot = df.groupby(["AgeGroup", "sex"])["PROCHI"].nunique().unstack(fill_value=0)12pivot.rename(columns={"M": "Male", "F": "Female"})
1df <- dbGetQuery(conn, "2 SELECT sex, Calculated_Age, PROCHI3 FROM Project_12345..Demography_Current4")5 6df$AgeGroup <- cut(df$Calculated_Age,7 breaks = c(0, 30, 40, 50, Inf),8 labels = c("<30", "30-39", "40-49", "50+"),9 right = FALSE)10 11table(df$AgeGroup, df$sex)