通过存储过程进行复杂插入

时间:2009-07-03 12:29:54

标签: sql sql-server-2008

我有1个包含行数据的表(No Primary Ky)。和另一个主键。

在行数据表中,我有3个参数的多条记录。和其他10个字段在这3个pereameters的所有记录中具有相同的值。

例如

aa bb cc dd ee ff gg hh ii p1 p2  p3          V1 V2 V3 V4 

a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009  5  2  3  4
a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009  10 1  4  4

我想在我的表中插入就像

aa bb cc dd ee ff gg hh ii p1 p2  p3          V1 V2 V3 V4 

a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009  15 3  7  8

按列p1,p2,p3 ...

只有一个记录组

任何人都可以建议我如何写SP为此??

我已经用列p1,p2,p3定义了一个光标。

首先我检查这些类型的记录是否存在于母版中?在我的主表中,主键基于这些参数。

然后我用gorup by子句写了查询...... ??

但这是正确的做法吗?

请指导..

先谢谢..

1 个答案:

答案 0 :(得分:0)

Oy - 这里没有游标,朋友。没有必要。试试这个:

INSERT MyDetailTable (aa, bb, cc, dd, ee, ff, gg, hh, ii, p1, p2, p3, V1, V2, V3, V4)
SELECT d.aa, d.bb, d.cc, d.dd, d.ee, d.ff, d.gg, d.hh, d.ii, d.p1, d.p2, d.p3, SUM(d.V1), SUM(d.V2), SUM(d.V3), SUM(d.V4)
FROM   MyDetailTable d
JOIN   MyMasterTable m ON d.p1 = m.p1
  AND  d.p2 = m.p2
  AND  d.p3 = m.p3
GROUP BY d.aa, d.bb, d.cc, d.dd, d.ee, d.ff, d.gg, d.hh, d.ii, d.p1, d.p2, d.p3

仅存在JOIN以验证主表中是否存在PK(尽管您应该使用外键约束来确保这种情况 - 因此您不需要检查每个主记录是否存在您针对详细信息表运行的语句)。 分组就是这样 - 按每行的“公共”字段分组。而不是按aa,bb,cc ..... p1,p2,p3进行分组,你可以按p1,p2,p3进行分组,并使用MAX(aa),MAX(bb),...如果你愿意的话......它是真的取决于你。

相关问题