现有明细,汇总两个表,明细如下,请问怎么可以直接把数据更新到汇总表?(不创建临时表的情况下)明细
店铺 商品 数量
一 A 2
一 B 1
一 B 3
一 B 4
一 C 2
二 A 3
二 B 2
三 B 2汇总
店铺 商品 数量(总)
一 A
一 B
一 C
二 A
二 B
三 A
三 C
店铺 商品 数量
一 A 2
一 B 1
一 B 3
一 B 4
一 C 2
二 A 3
二 B 2
三 B 2汇总
店铺 商品 数量(总)
一 A
一 B
一 C
二 A
二 B
三 A
三 C
-- Author :DBA_HuangZJ(發糞塗牆)
-- Date :2014-08-04 16:17:26
-- Version:
-- Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
-- May 14 2014 18:34:29
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[TB1]
if object_id('[TB1]') is not null drop table [TB1]
go
create table [TB1]([店铺] varchar(2),[商品] varchar(1),[数量] int)
insert [TB1]
select '一','A',2 union all
select '一','B',1 union all
select '一','B',3 union all
select '一','B',4 union all
select '一','C',2 union all
select '二','A',3 union all
select '二','B',2 union all
select '三','B',2
--> 测试数据:[TB2]
if object_id('[TB2]') is not null drop table [TB2]
go
create table [TB2]([店铺] varchar(2),[商品] varchar(1),[数量(总)] INT)
insert [TB2]
select '一','A',null union all
select '一','B',null union all
select '一','C',null union all
select '二','A',null union all
select '二','B',null union all
select '三','A',null union all
select '三','C',null
--------------开始查询--------------------------select * from [TB2]UPDATE tb2
SET [数量(总)]=a.数量
FROM tb2 INNER JOIN (select[店铺], [商品],ISNULL(SUM(数量),0) 数量
from [TB1]
GROUP BY [店铺], [商品]) a ON tb2.店铺=a.店铺 AND tb2.商品=a.商品SELECT * FROM tb2
----------------结果----------------------------
/*
店铺 商品 数量(总)
---- ---- -----------
一 A NULL
一 B NULL
一 C NULL
二 A NULL
二 B NULL
三 A NULL
三 C NULL(7 行受影响)(5 行受影响)店铺 商品 数量(总)
---- ---- -----------
一 A 2
一 B 8
一 C 2
二 A 3
二 B 2
三 A NULL
三 C NULL
*/
SET 数量 = (SELECT SUM(数量)
FROM 明细
WHERE 明细.店铺 = 汇总.店铺
AND 明细.商品 = 汇总.商品) FROM 汇总,明细
SET 数量 = (SELECT SUM(数量)
FROM 明细
WHERE 明细.店铺 = 汇总.店铺
AND 明细.商品 = 汇总.商品) FROM 汇总,明细执行报错,提示:
无法绑定由多个部分组成的标识符 "明细.门店"
只能先汇总再 UPDATE,和2楼代码等价,不献丑了。
create index IX_SUM on 汇总表 (店铺 , 商品);
(店铺 char(20),
商品 char(10),
数量 decimal(10,2))
create table 汇总
(店铺 char(20),
商品 char(10),
数量 decimal(10,2))insert into 明细 values
('一','A',2),('一','B',1),
('一','B',3),('一','B',4),
('一','C',2),('二','A',3),
('二','B',2),('三','B',2)insert into 汇总 values
('一','A',null),('一','B',null),
('一','C',null),('二','A',null),
('二','B',null),('三','A',null),
('三','B',null),('三','C',null)select * from 明细
select * from 汇总update a set a.数量=(select SUM(b.数量) from 明细 b
where b.店铺=a.店铺 and b.商品=a.商品 ) from 汇总 a