【发布时间】:2021-11-04 20:41:05
【问题描述】:
我正在尝试在 MySQL Workbench 中使用以下条件创建新列。
我尝试编写代码来获取新列(输出),它应该是这样的: 如果亚洲人是,那么亚洲人 如果黑色为是,则为黑色 如果黑色为是,其他为是,则为黑色 如果白色为是,则为白色 如果西班牙裔是肯定的,那么西班牙裔 如果西班牙裔是“是”并且其他人是“是”那么西班牙裔 如果太平洋是肯定的,那么太平洋 IF Middle 是 Yes Then Middle 如果其他为是,则其他 如果报告了一个以上然后多个(期望黑人和其他人是肯定的,西班牙裔和其他人是肯定的) 否则不报告
CREATE TABLE Test(
ID INT NOT NULL,
Asian CHAR(7),
Black CHAR(9),
White CHAR(6),
Hispanic CHAR(5),
Pacific CHAR(7),
Middle CHAR(9),
Other CHAR(6)
);
insert into Test values
(1,'Yes','No','No','No', 'No','No','No'),
(2,'No','Yes','No','No', 'No','No','No'),
(3,'No','No','Yes','No', 'No','No','No'),
(4,'No','No','No','Yes', 'No','No','No'),
(5,'No','No','No','No', 'Yes','No','No'),
(6,'No','No','No','No', 'No','Yes','No'),
(7,'No','No','No','No', 'No','No','Yes'),
(8,'No','No','No','No', 'Yes','No','Yes'),
(9,'No','Yes','No','No', 'No','No','Yes'),
(10,'Yes','Yes','Yes','No', 'No','No','Yes'),
(11,'No','No','Yes','Yes', 'No','No','Yes'),
(12,'No','No','No','Yes', 'No','No','Yes'),
(13,'No','Yes','No','No', 'No','No','Yes')
;
Select ID, Asian, Black, White, Hispanic, Pacific, Middle, Other,
case
when Asian='Yes' then
case
when Black='No' then 'Asian'
when White='No' then 'Asian'
when Hispanic='No' then 'Asian'
when Pacific='No' then 'Asian'
when Middle='No' then 'Asian'
when Other='No' then 'Asian'
end
When Black='Yes' then
case
when Asian='No' then 'Black'
when White='No' then 'Black'
when Hispanic='No' then 'Black'
when Pacific='No' then 'Black'
when Middle='No' then 'Black'
when Other='Yes' then 'Black'
end
When White='Yes' then
case
when Asian='No' then 'White'
when Black='No' then 'White'
when Hispanic='No' then 'White'
when Pacific='No' then 'White'
when Middle='No' then 'White'
when Other='No' then 'White'
end
When Hispanic='Yes' then
case
when Asian='No' then 'Hispanic'
when Black='No' then 'Hispanic'
when White='No' then 'Hispanic'
when Pacific='No' then 'Hispanic'
when Middle='No' then 'Hispanic'
when Other='Yes' then 'Hispanic'
end
When Pacific='Yes' then
case
when Asian='No' then 'Pacific'
when Black='No' then 'Pacific'
when White='No' then 'Pacific'
when Hispanic='No' then 'Pacific'
when Middle='No' then 'Pacific'
when Other='No' then 'Pacific'
end
When Middle='Yes' then
case
when Asian='No' then 'Middle'
when Black='No' then 'Middle'
when White='No' then 'Middle'
when Hispanic='No' then 'Middle'
when Pacific='No' then 'Middle'
when Other='No' then 'Middle'
end
When Other='Yes' then
case
when Asian='No' then 'Other'
when Black='No' then 'Other'
when White='No' then 'Other'
when Hispanic='No' then 'Other'
when Pacific='No' then 'Other'
when Middle='No' then 'Other'
end
else 'Multiple'
end AS Race
FROM Test;
我没有得到“多个”。您的帮助和意见将不胜感激。谢谢。
【问题讨论】:
-
外部
CASE语句的结构方式,如果有亚洲='No',White='No',Black='No' 的记录,你只会得到'Multiple'等。对于您显示的所有测试记录,至少有一个“是”,这意味着将评估内部CASE语句之一。 -
问题在于你的桌子设计。
-
kosmer 清楚地描述了这个问题。使用
case when Asian='Yes' then ... When Black='Yes' then ... When White='Yes' then ... else 'Multiple',对于所有值都不是“是”的行,您将获得“多个”,并且显示的表中没有这样的行。因此,我不考虑表格设计 the 问题,但是当您想要检测某些组合时,使用此表格会变得相当笨拙,最好有一个每行一行的表格而是 ID 和属性,因此您可以简单地聚合。 -
如果是我,我会有两列
ID, Ethnicity和PRIMARY KEY(ID, Ethnicity)。
标签: mysql sql mysql-workbench