我有一个数据密集型问题,需要大量的按摩和数据操作,我将它放在那里,看看是否有人知道如何处理它。
最简单的形式。我有很多桌子可以连在一起给我一份牙医的价格清单,以及每个手术收费多少。
所以我们有多个看起来像这样的表。
Dentist | Procedure1 | Procedure2 | Procedure3 | .........| Procedure?
John | 500 | 342 | 434 | .........| 843
Dave | 343 | 434 | 322 | NULLs....|
Mary | 500 | 342 | 434 | .........| 843
Linda | 500 | 342 | Null | .........| 843
牙医可以为每个程序提供不同数量的程序和不同的定价。但是,有很多牙医拥有相同数量的手术和相同的费率。在内部,我们为每个所谓的费用列表创建一个唯一的ID。
像John一样是001,Dave会是002,但是Mary将是001,Linda将是003 如果我必须处理这些数据一次并没有那么糟糕,但这些费用列表是平面文件(csvs),我基本上必须DTS到SQL服务器才能使用。他们每月来一次。每个牙医的定价可能会逐月变化,然后在内部将它们放入不同的唯一ID中。有人能否详细说明如何最好地解决这个问题,以便每月处理最有效率,而无需进行大量数据操作?
任何帮助都会很棒,谢谢你们。
答案 0 :(得分:1)
您可能需要对数据进行取消操作以对其进行标准化 - 以便最终得到:
Doctor: DoctorID, DoctorDetails...
FeeSchedule: DoctorID, ScheduleID, EffectiveDate, OtherDetailAtThisLevel...
FeeScheduleDetail: ScheduleID, ProcedureCode, Fee, OtherDetailAtThisLevel...
当数据进入医生时,它会被旋转,创建一个新的计划,并根据不透露的数据创建详细信息行。
SSIS有一个univot组件,没问题 - 您先加载计划,然后再加载详细信息。如果格式差异很大,您可能需要自定义数据源或只是避免使用SSIS。
该系统将跟踪医生的新时间表。如果医生的时间表相同,则您根本不能插入它。
如果这个逻辑很广泛,你可以将数据加载到登台表(SSIS或其他),并在SQL中完成所有这些(T-SQL也有一个UNPIVOT运算符)。这可能具有以下优点:代码全部在一个地方,并且可以在集合中完成所有操作。
关于邮政编码,如果医生没有收费,这些是常规和惯常费用吗?这可以简单地从医生行的邮政编码确定。在这种情况下,您有几个选择。您可以通过邮政编码费用表覆盖医生费用表:
ZipCodeSchedule: ZipScheduleID, ZipCode, EffectiveDate
ZipCodeScheduleDetail: ZipScheduleID, ProcedureCode, Fee
或者您可以将其保存在常规费用计划中(可能带有某种标志,默认为UCR)。