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)