我有一个包含临床名称和医生名称的表格。一个诊所可以有很多医生。我需要将此数据分为两个表。一个带有诊所信息,另一个带有医生信息
尝试在SQL查询中执行此操作
表CLINIC_DOC:
ID ClinicName Doctor
------------------------
1 xyz Dr Joe
2 xyz Dr Bob
3 abc Dr Mary
4 abc Dr John
我想像这样将数据分成以下表格:
Table ClinicsData:
ClinicID ClinicName
----------------------
1 xyz
2 abc
Table DoctorData:
DocId ClinicID Doctor
--------------------------
1 1 Dr Joe
2 1 Dr Bob
3 2 Dr Mary
4 2 Dr John
答案 0 :(得分:1)
假设ID列(ClinicID
和DocID
是自动生成的,并且诊所名称是唯一的(即,在您的现实世界中,没有两个诊所使用相同的名称)数据代表),您可以尝试:
INSERT INTO clinicsdata
(clinicname)
SELECT DISTINCT
cd.clinicname
FROM clinic_doc cd;
INSERT INTO doctordata
(clinicid,
doctor)
SELECT c.clinicid,
cd.doctor
FROM clinic_doc cd
INNER JOIN clinicsdata c
ON c.clinicname = cd.clinicname;
答案 1 :(得分:1)
首先,您可能需要创建要填充的表。这是我对数据类型的最佳猜测:
CREATE TABLE ClinicsData
(
ClinicID INT IDENTITY(1,1),
ClinicName varchar(100)
)
CREATE TABLE DoctorData
(
DocID INT IDENTITY(1,1),
ClinicID INT,
Doctor VARCHAR(100)
)
请注意,我已将ClinicsData.ClinicID
列为IDENTITY
列。这将有助于我们稍后填充DoctorData
。
接下来,让我们用所有不同的诊所名称填充ClinicsData
。
INSERT INTO ClinicsData
(
ClinicName
)
SELECT DISTINCT
ClinicName
FROM CLINIC_DOC;
现在,我们可以使用ClinicsData
利用DoctorData
来填充INNER JOIN
。
INSERT INTO DoctorData
(
ClinicID
,Doctor
)
SELECT DISTINCT
cd.ClinicID,
c_d.Doctor
FROM CLINIC_DOC c_d
INNER JOIN ClinicsData cd ON cd.ClinicName = c_d.ClinicName