将来自多个源表的数据合并到一个目标表中
问题描述:
我正在尝试编写一个将一个表的内容转换为另一个表的存储过程,但是我不知道从哪里开始。在我的场景中,我有4个表格:[Source],[Type_A],[Type_B] & [Destination]。将来自多个源表的数据合并到一个目标表中
[来源]有2列,其值需要结转到[目的地]。 [Source]中的一列是“type”(鉴别器)。
如果“type”为0,那么我需要从[Type_A] &中添加一个列的子集,并在添加了一些静态值的情况下向[Destination]添加记录。
如果“类型”为1,则我需要拉列的子集从[TYPE_B] &添加一条记录至[目的地]一些不同静态值添加。
每次执行此存储过程时都会处理不定数量的记录,用户将从ASP.NET应用程序调用此存储过程。
我是SQL中的一个相对newb,所以请原谅我,如果解决方案是简单的。我知道我可以在代码(C#)中迭代执行此操作,但我宁愿避免多个数据库调用的开销&想将整个事件包装在事务中。
如果任何人都可以告诉我如何才能做到这一点,我会非常感激。
谢谢!
答
假定有来源,TYPE_A和TYPE_B之间的关系:
INSERT INTO Destination
(Col1, Col2, Col3, Col4, Col5)
SELECT s.Col1,
s.type,
/* The next two columns illustrate choosing a */
/* subset from either Type_A or Type_B */
COALESCE(a.Col3, b.Col3),
COALESCE(a.Col4, b.Col4),
/* The next column illustrates choosing a */
/* static value based on Source.type */
CASE WHEN s.type = 0 THEN 'Static Value 1'
WHEN s.type = 1 THEN 'Static Value 2'
ELSE NULL
END /* CASE */
FROM Source s
LEFT JOIN Type_A a
ON s.Col1 = a.Col1
AND s.type = 0
LEFT JOIN Type_B b
ON s.Col1 = b.Col1
AND s.type = 1
我将不得不调整这一点得到一切拉我需要的方式,但是这是非常有帮助!好东西!谢谢乔! – Mysterei 2012-02-03 15:26:26