select 身份證號碼,
MAX(t.單位編號) 單位編號,
MAX(t.姓名) 姓名,
MAX(case when t.rows=1 then convert(varchar(max),疾病名稱) end) 疾病1,
MAX(case when t.rows=2 then convert(varchar(max),疾病名稱) end) 疾病2,
MAX(t.單位名稱) 單位名稱,
MAX(t.醫院編碼) 醫院編碼,
MAX(t.醫院名稱) 醫院名稱,
MAX(t.人員類別) 人員類別,
max(t.性別) 性別
from(select
ROW_NUMBER() over(partition by 身份證號碼 order by 姓名) as rows,
case
when len(身份證號碼) = 15 and cast(substring(身份證號碼,15,1) as int) % 2 = 0 then '女'
when len(身份證號碼) = 15 and cast(substring(身份證號碼,15,1) as int) % 2 = 1 then '男'
when len(身份證號碼) = 18 and cast(substring(身份證號碼,17,1) as int) % 2 = 0 then '女'
when len(身份證號碼) = 18 and cast(substring(身份證號碼,17,1) as int) % 2 = 1 then '男'
else null end as 性別,*
from
dbo.tablename
)t
group by 身份證號碼
row_number將group by分組中的人員編號 然后使用case when 進行區分兩種疾病的人。