我正熟悉SQL,特别是因为我现在正在处理的问题,我知道如何使用Excel中的参考Countif公式来完成任务,但因为我正在处理接近100万条记录,Excel不断轰炸我,SQL似乎是一种更有效的方法来完成任务。
背景
基本上我有一个像这样的'summary'表:
ID_summary(ID_num, exist_2009, exist_2010, exist_2011, exist_2012)
然后我有4个表,每个表对应于2009年,2010年,2011年和2012年,每个表ID_num和日期只有两列。
2009(ID_num,date)
ID_summary表包含四年表中存在的所有唯一ID的完整列表。我通过四年制工会的工会创建了这个清单。
问题:
如果ID号出现在相应的年份表中,我想编写一个更新查询(?),为每个记录填充每个“exists_20XX”列的“TRUE”或“1”的ID_summary表。 / p>
例如,如果ID 002仅出现在2009年和2012年,那么摘要表中ID 002的行应如下所示
ID_summary(ID_num, exist_2009, exist_2010, exist_2011, exist_2012)
ID_002,TRUE,FALSE,FALSE,TRUE
我已经完成了类似的基本查询以进行一些数据清理并获得了成功的结果,但它始终只是引用同一个表中的其他字段来确定字段是否应该重新编码。
我正在使用MS Access 2010。
非常感谢任何帮助!
答案 0 :(得分:1)
好的,我在这里查了一下。
http://msdn.microsoft.com/en-us/library/office/bb221186%28v=office.12%29.aspx
似乎语法可能略有不同 对于MS Access,而不是SQL Server。
按此顺序尝试这两个:
update ID_summary
set exist_2009 = 0 -- false
update
ID_summary ids
left join table_2009 t on ids.ID_num = t.ID_num
set
ids.exist_2009 = 1 -- true
where
(t.ID_Num is not null)
如果是SQL Server,则需要使用
使用稍微不同的语法
但我们在这里谈论MS Access。
update ids
set
ids.exist_2009 = 0 -- false
from
ID_summary ids
update ids
set
ids.exist_2009 = 1 -- true
from
ID_summary ids
left join table_2009 t
on ids.ID_num = t.ID_num
where
(t.ID_Num is not null)