跪求表合并SQL语句,急,恳求大侠帮助! ( 积分: 100 )

  • 主题发起人 主题发起人 neal_wang
  • 开始时间 开始时间
N

neal_wang

Unregistered / Unconfirmed
GUEST, unregistred user!
跪求SQL语句<br>数据库为MSSQL<br>表A<br>NO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PN&nbsp;&nbsp;&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QTY&nbsp;&nbsp;&nbsp;Manu<br>P1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PN1&nbsp;&nbsp;PN1&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;M1<br>P2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PN2&nbsp;&nbsp;PN2&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;M2<br>.....<br>表B<br>ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO&nbsp;&nbsp;&nbsp;PN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QTY&nbsp;&nbsp;&nbsp;Manu&nbsp;&nbsp;&nbsp;T<br>PD001&nbsp;&nbsp;&nbsp;&nbsp;P0&nbsp;&nbsp;&nbsp;&nbsp;PN0&nbsp;&nbsp;&nbsp;&nbsp;PN0&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T0<br>PD002&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;&nbsp;&nbsp;&nbsp;PN11&nbsp;&nbsp;&nbsp;PN11&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T1<br>PD003&nbsp;&nbsp;&nbsp;&nbsp;P4&nbsp;&nbsp;&nbsp;&nbsp;PN14&nbsp;&nbsp;&nbsp;PN14&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T4<br>PD004&nbsp;&nbsp;&nbsp;&nbsp;P2&nbsp;&nbsp;&nbsp;&nbsp;PN12&nbsp;&nbsp;&nbsp;PN12&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T2<br>ID是表B的主键,为PD+序列号,如果NO相同则T的值相同<br><br>现在需要将表A和表B合并<br><br>结果为<br>表B<br>ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO&nbsp;&nbsp;&nbsp;PN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QTY&nbsp;&nbsp;&nbsp;Manu&nbsp;&nbsp;T<br>PD001&nbsp;&nbsp;&nbsp;&nbsp;P0&nbsp;&nbsp;&nbsp;&nbsp;PN0&nbsp;&nbsp;&nbsp;&nbsp;PN0&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;&nbsp;T0<br>PD002&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;&nbsp;&nbsp;&nbsp;PN11&nbsp;&nbsp;&nbsp;PN11&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T1<br>PD003&nbsp;&nbsp;&nbsp;&nbsp;P4&nbsp;&nbsp;&nbsp;&nbsp;PN14&nbsp;&nbsp;&nbsp;PN14&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T4<br>PD004&nbsp;&nbsp;&nbsp;&nbsp;P2&nbsp;&nbsp;&nbsp;&nbsp;PN12&nbsp;&nbsp;&nbsp;PN12&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M0&nbsp;&nbsp;&nbsp;T2<br>PD005&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;&nbsp;&nbsp;&nbsp;PN1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PN1&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M1&nbsp;&nbsp;&nbsp;&nbsp;T1<br>PD006&nbsp;&nbsp;&nbsp;&nbsp;P2&nbsp;&nbsp;&nbsp;&nbsp;PN2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PN2&nbsp;DESC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M2&nbsp;&nbsp;&nbsp;&nbsp;T2
 
不就是把表A里的记录查到表B里&nbsp;同时生成ID字段嘛<br>1、触发器(在表A加触发器处理)(原理根2一样)<br>2、a、找出表B的最大的ID<br>&nbsp;&nbsp;&nbsp;b、查询出表A的记录(按你所需的排序)<br>&nbsp;&nbsp;&nbsp;c、循环插入&nbsp;(根据最大的ID生成ID字段,注意累加最大的ID)
 
DECLARE&nbsp;@SQL&nbsp;varchar(300),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@NO&nbsp;varchar(50),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@PN&nbsp;varchar(50),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DE&nbsp;varchar(50),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@QTY&nbsp;int,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@InID&nbsp;int,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Num&nbsp;Int,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Manu&nbsp;varchar(50),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Str&nbsp;varchar(50)<br><br>DECLARE&nbsp;Cursor_表A&nbsp;CURSOR&nbsp;FOR<br>SELECT&nbsp;*&nbsp;FROM&nbsp;表A;<br><br>SELECT&nbsp;@InID&nbsp;=&nbsp;Max(CAST(Right(ID,&nbsp;3)&nbsp;AS&nbsp;int))&nbsp;FROM&nbsp;表B<br><br>OPEN&nbsp;Cursor_表A;<br>FETCH&nbsp;NEXT&nbsp;FROM&nbsp;Cursor_表A&nbsp;INTO&nbsp;@NO,@PN,@DE,@QTY,@Manu;<br>WHILE&nbsp;@@FETCH_STATUS&nbsp;=&nbsp;0<br>BEGIN<br>&nbsp;&nbsp;SET&nbsp;@InID&nbsp;=&nbsp;@InID&nbsp;+&nbsp;1;<br>&nbsp;&nbsp;SET&nbsp;@Str&nbsp;=&nbsp;Str(@InID);<br>&nbsp;&nbsp;SET&nbsp;@Num&nbsp;=&nbsp;Len(@Str);<br>&nbsp;&nbsp;SET&nbsp;@Str&nbsp;=&nbsp;'PD'&nbsp;+&nbsp;Stuff('000',&nbsp;3-@NUM,&nbsp;@NUM,&nbsp;@Str)<br>&nbsp;&nbsp;INSERT&nbsp;INTO&nbsp;表B&nbsp;VALUES&nbsp;(@Str,@NO,@PN,@DE,@QTY,@Manu);<br>&nbsp;&nbsp;FETCH&nbsp;NEXT&nbsp;FROM&nbsp;Cursor_表A&nbsp;INTO&nbsp;@NO,@PN,@DE,@QTY,@Manu; &nbsp;&nbsp;<br>END;<br>CLOSE&nbsp;Cursor_表A;<br>DEALLOCATE&nbsp;Cursor_表A;
 
不晓得你的ID是怎么算的pd+序列号?这个序列号指什么是自动得还是自己算最大的累加?<br>insert&nbsp;b&nbsp;select&nbsp;'PD'+自动序列号,*&nbsp;from&nbsp;a
 
尽量想办法减少连表查询。
 
各位大侠,再帮帮啊!
 
给你的方法&nbsp;看了吗?<br><br>已经很详细了
 
多谢银工,我试试看!
 
UP,没说明白。可能要简单的方法。
 
我已经试过,是可以的.但是还有一栏位T如何更新?是不是必须在做第二步更新工作?<br>多谢各位相助!
 
多人接受答案了。
 
后退
顶部