最近用到的sql语句,记录下。
使用环境:sqlserver2008R2
1、需求:表A中原始数据,表B中为新数据,要求如果表A中存在相同数据,则不写入这些数据,数据部分相同则更新数据,没有的数据则插入。
于是:
第一步,需要两表间去重,使用了
select * into B1 from B where no exist (select 1 from A,B where a.列1=b.列1,...);
注意:如果比较的列中字段值有null的情况下,无法比较是否相同。这种方式只能适用于非空列。
第二步,将B1的整表插入到表A。(或者使用整表更新)
第三步,根据表A中某些字段判别删除旧的数据。(或者插入表B中表A没有的数据)
2、需求:表内计算,表内结构为树结构如图:表中字段均为varchar
需要将当前FLAG为1的数据的HS合计到他的FXH对应的ZXH的那条数据中的HS字段值中去。
于是,第一步将合计数据计算出来放入临时表。
select SUM(CONVERT(numeric(16,3),isnull(hs,'0'))) as HSHJ,vid,flag,FXH,PDH,CDH into #table2 from Table_1 group by vid,flag,FXH,PDH,CDH having flag='1'
table2结果为:
第二步,用临时表的数据更新原始数据表,记得做求和。
update Table_1 set Table_1.HS=(CONVERT(numeric(16,3),isnull(b.HSHJ,'0'))+CONVERT(numeric(16,3),isnull(Table_1.HS,'0'))) from #table2 b where Table_1.zxh=b.fxh and Table_1.CDH=b.PDH
完成,结果如下:
3、需求:将多张表的数据合并到一张表中
使用了
select * from A union select * from B union select * from C
注意:表中字段名要相同,如果不同需要指定字段名,并as为第一张表中的字段名。