问题是表格违反了第一范式,EmpLotusNotes 不应该包含员工的姓名和国家,大概是他们工作的国家。
您应该质疑不允许您清理结构和数据的原因。
见https://www.google.com.au/search?q=sql+first+normal+form+atomic
答案是,如果您在挑战后仍然无法规范化数据库,则为国家创建一个查询,创建一个查询以将第一个表中的数据拆分为第一个范式,然后将两者连接起来。
下面是一个适用于 mysql 的示例,对于 MS SQL,您将使用 CHARINDEX 而不是 INSTR 和 substring 而不是 substr。
select employeesWithCountries.*
, countries.sort
from (
select empId, empLotusNotes, substr( empLotusNotes, afterStartOfDelimiter ) country from (
select empId
, empLotusNotes
, INSTR( empLotusNotes, '/' ) + 1 as afterStartOfDelimiter
from EmployeesLotusNotes
) employees
) employeesWithCountries
inner join (
SELECT 'Japan' as country, 1 as sort
union
SELECT 'China' as country, 2 as sort
union
SELECT 'India' as country, 3 as sort
union
SELECT 'USA' as country, 4 as sort
) countries
on employeesWithCountries.country = countries.country
order by countries.sort, employeesWithCountries.empLotusNotes
结果。
30003 Kyo Jun/Japan Japan 1
40004 Jee Lee/China China 2
10001 Amit B/India India 3
20002 Bharat C/India India 3
50005 Xavier K/USA USA 4