我有一个非常大的Excel电子表格,我转移到Access以尝试更轻松地处理它。我非常喜欢新手。我正在尝试通过Access使用SQL。
我需要为重复项分配唯一标识符。我见过人们在SQL中使用DENSE_RANK但我无法在Access中使用它。
以下是我要做的事情:我有大量的患者和样本数据(20k行)。我的列名为FULL_NAME,SAMPLE_NUM和DATE_REC。一些患者不止一次进来并且有多个样本。我想给每位患者一个我想称之为PATIENT_ID的唯一ID。
除了在每一行输入外,我无法弄清楚如何做到这一点。我非常感谢帮助,因为我真的不知道自己在做什么,而且我的工作中没有人可以提供帮助。
答案 0 :(得分:0)
听起来像FULL_NAME目前是唯一标识符。但是,名称的唯一标识符非常差,名称部分应位于不同的字段中。您确定您没有多名同名患者,例如约翰史密斯?
您需要一个PatientInfo表,然后是SampleData表。做一个提取DISTINCT患者信息的查询(显然这只是一个字段--FULL_NAME)并创建一个表格,用自动编号字段生成唯一ID。然后构建一个连接两个FULL_Name字段上的表的查询,并更新SampleData中名为PatientID的新字段。从SampleData中删除FULL_Name字段。
答案 1 :(得分:0)
表中对行进行编号的命令为[1]
ALTER TABLE MyTable ADD COLUMN ID AUTOINCREMENT;
无论如何,正如June7指出的那样,根据患者姓名组合记录可能不是一个好主意,因为可能存在重复记录。更好的方法是将每条记录视为现在的独特患者,并在患者回来时找到一种方法来修复患者ID。我建议采用这种方式:
samples
表格中创建两个新列
ID
根据上述查询自动增量patientID
您将从ID列复制值 - 现在它们将是相同的。但将来他们会分道扬。patientID
和patientName
复制到单独的表patients
patientName
表格samples
列
imported
添加到patients
表,以指示可能存在属于该患者的其他记录。imported
指示符,因为此患者数据是最新的。为样本记录修复patientID
之后。您将最终找到samples
表中没有记录的患者。所以你可以去删除它们。
答案 2 :(得分:0)
除非您已经拥有自然密钥,否则当您运行不同的查询并从中构建密钥时,您将损坏此数据。从您的发布中我会猜到自然键是SAMPLE_NUM。另一个问题是,如果你按姓氏汇总,你几乎肯定会将不同的病人合并为一个。
答案 3 :(得分:0)
为了说明先前答案的文本说明,请考虑以下SQL操作查询,这些查询可以逐个在Access查询窗口中运行,也可以作为DAO的CurrentDb.Execute
或DoCmd.RunSQL
的VBA字符串查询。 ALTER
语句可以在MSAcecss.exe中完成。
创建患者表(生成表查询)
SELECT DISTINCT s.FULL_NAME INTO myPatientsTable
FROM mySamplesTable s
WHERE s.FULL_NAME IS NOT NULL;
将自动编号字段作为主键添加到新的患者表
ALTER TABLE myPatientsTable ADD COLUMN PATIENT_ID AUTOINCREMENT NOT NULL PRIMARY KEY;
将空白的Patient_ID列添加到Samples表
ALTER TABLE mySamplesTable ADD COLUMN PATIENT_ID INTEGER;
使用 FULL_NAME 字段更新Samples表格中的Patient_ID列
UPDATE mySamplesTable s
INNER JOIN myPatientsTable p
ON s.[FULL_NAME] = p.[FULL_NAME]
SET s.PATIENT_ID = p.PATIENT_ID;
维护third-norm principles of relational databases并从Samples表中删除 FULL_NAME 字段
ALTER TABLE mySamplesTable DROP COLUMN FULL_NAME;
然后在单独的查询中,在 PATIENT_ID 上添加foreign key constraint
ALTER TABLE mySamplesTable
ADD CONSTRAINT PatientRelationship
FOREIGN KEY (PATIENT_ID)
REFERENCES myPatientsTable (PATIENT_ID);