日期:2014-05-17  浏览次数:20575 次

根据B表更新A表字段问题
小弟不才,今日碰到一个表更新问题,求大神指点,建立环境如下:

--USE TEST 
--DROP TABLE A ;
--DROP TABLE B ;
CREATE TABLE A(ID VARCHAR(5),SKU VARCHAR(5),QTY NUMERIC);
CREATE TABLE B(ID VARCHAR(5),SKU VARCHAR(5),QTY NUMERIC);

INSERT INTO A
SELECT '1','abcde','1'
UNION ALL
SELECT '1','abcde','2'
UNION ALL
SELECT '1','abcde','3';

INSERT INTO B
SELECT '1','abcde','6';

SELECT * FROM A;
SELECT * FROM B;

--说明,需要根据B表QTY更新A表QTY,且更新后的SUM(A.QTY)=B.QTY
--条件是根据A.ID=B.ID ADN A.SKU=B.SKU

--举例
A表:
ID  SKU  QTY
1  ABCDE  1
1  ABCDE  2
1  ABCDE  3
B表:
1  ABCDE  5

结果:
A表:
ID  SKU  QTY
1  ABCDE  0
1  ABCDE  2
1  ABCDE  3
或者
A表:
ID  SKU  QTY
1  ABCDE  1
1  ABCDE  2
1  ABCDE  2
或者
A表:
ID  SKU  QTY
1  ABCDE  1
1  ABCDE  1
1  ABCDE  3
总之是SUM(A.QTY)=B.QTY,但是A中记录条数不能少!!!!
 
SQL

------解决方案--------------------
引用:
Quote: 引用:

给你个示例

update B set B.i1=A.i1 from A where B.iid=A.iid

哥,你这是更新B表?麻烦仔细看下需求,谢谢!

你这什么需求啊?直接把A表中满足A.ID=B.ID ADN A.SKU=B.SKU第一条记录的的A.QTY改为B.QTY,其他的都是0不就可以了
------解决方案--------------------
大概就这样,不过你的A表没有标识列,update的时候会有问题

--DROP?TABLE?A?;
--DROP?TABLE?B?;
--CREATE?TABLE?A(ID?VARCHAR(5),SKU?VARCHAR(5),QTY?int);
--CREATE?TABLE?B(ID?VARCHAR(5),SKU?VARCHAR(5),QTY?int);
?
--INSERT?INTO?A
--SELECT?'1','abcde','1'
--UNION?ALL
--SELECT?'1','abcde','2'
--UNION?ALL
--SELECT?'1','abcde','3';
?
--INSERT?INTO?B