【发布时间】:2021-06-09 18:28:57
【问题描述】:
我有一个数据库,允许每人拥有多个种族。不幸的是,我们的答案基本上是“是西班牙裔”、“非西班牙裔”和“未知”,而且有些人确实有多项选择。我需要运行一个大型查询来提取大量信息,其中之一是种族,我想将具有多个选择的那些“转换”为未知。
person_ethnicity_xref 表:
| Person_ID | Ethnicity_ID |
|---|---|
| 1234567 | SLWOWQ |
| 1234567 | ZLKJDU |
mstr_lists 表:
| Ethnicity_ID | Ethnicity |
|---|---|
| SLWOWQ | Hispanic |
| ZLKJDU | Not Hispanic |
我一直在努力解决这个问题,因为我不能将 For XML Path 与两个表一起使用,所以我现在尝试使用以下逻辑 案子 当 count(ethnicity_ID)>1 然后'未知' 其他种族 结束
这就是我所拥有的
select
p.person_nbr,
case
when count(eth1.ethnicity_item_id)>1 then 'Unknown'
else ml1.mstr_list_item_desc
end 'final eth'
from
person_table p
left join person_ethnicity_xref eth1 on p.person_id=eth1.person_id
left join mstr_lists ml1 on eth1.ethnicity_item_id=ml1.mstr_list_item_id
group by
p.person_nbr,
ml1.mstr_list_item_desc
这给了我结果,但是当我检查它们时,具有 >1 的那些没有未知值,并且每个种族的人被列出两次。
这个更大查询的另一部分在 FROM 中有一个子查询,用于计算比赛和一个单独的表连接,仅用于计数 = 1 的那些。然后案例说,如果计算种族的子查询出现 >1,那么 X 否则使用另一个表作为 count=1。因为比赛表也使用了 mstr_list,所以涉及 5 个表(现在我更仔细地查看了第二个 person_id 加入,并且计数和常规表有一个 mstr_list ......我不知道为什么,我的大脑累了,那个计数表不是一个简单的计数,而且还在做其他事情)。这真的是唯一的选择吗?这个查询已经运行了 10 多分钟(它不是在生产环境中运行的!)而且我不想通过复制之前的作者所做的事情来让它变得更糟。
【问题讨论】:
-
count(distinct eth1.ethnicity_item_id)?
标签: sql sql-server