This query is forcing me to put f.CONCEPT_CD in the group by clause because I'm using it in the case statements in the select clause. How do I keep the counts in the result set, without repeating records with the same f.PATIENT_NUM? Notice how PATIENT_NUM = 5 is repeated in the screen shot below. I only want to show one record if PATIENT_NUM = 5.
SELECT
f.PATIENT_NUM,
CASE WHEN f.CONCEPT_CD = 'BIO|HGT' THEN COUNT(NVAL_NUM) ELSE 0 END AS 'HEIGHT',
CASE WHEN f.CONCEPT_CD = 'BIO|WGT' THEN COUNT(NVAL_NUM) ELSE 0 END AS 'WEIGHT',
CASE WHEN f.CONCEPT_CD = 'BIO|BMI' THEN COUNT(NVAL_NUM) ELSE 0 END AS 'BMI',
CASE WHEN f.CONCEPT_CD = 'BIO|DIA' THEN COUNT(NVAL_NUM) ELSE 0 END AS 'DIA',
CASE WHEN f.CONCEPT_CD = 'BIO|SYS' THEN COUNT(NVAL_NUM) ELSE 0 END AS 'SYS'
FROM [HIMC_I2B2_LZ-PROD].[dbo].[I2B2_OBSERVATION_FACT] f
JOIN [HIMC_I2B2_LZ-PROD].[dbo].[I2B2_CONCEPT_DIMENSION] d ON f.CONCEPT_CD = d.CONCEPT_CD
GROUP BY f.PATIENT_NUM, f.CONCEPT_CD