首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎样将几个字段值的汇总,写入到另一个表中呀?该怎么解决

2012-01-23 
怎样将几个字段值的汇总,写入到另一个表中呀?怎样将几个字段值的汇总,写入到另一个表中呀?就是在一个表中

怎样将几个字段值的汇总,写入到另一个表中呀?
怎样将几个字段值的汇总,写入到另一个表中呀?
就是在一个表中的字段存入另几个表中的几个字段的汇总。
比如A表中的 a字段 b字段 和B表中的c字段 d字段 的和存入C表中的e字段呀?

[解决办法]
比如A表中的 a字段 b字段 和B表中的c字段 d字段 的和存入C表中的e字段呀?
insert into c(e) select (sum(a)+sum(b)) as sum1 from a
[解决办法]
insert into c(e) select (a+b+(select c+d from b)) from a
[解决办法]
自动的,得用触发器
[解决办法]
-- 比如A表中的 a字段 b字段 和B表中的c字段 d字段 的和存入C表中的e字段呀?
CREATE TABLE A(A INT,B INT)
SELECT * FROM A
GO
CREATE TABLE B(C INT,D INT)
SELECT * FROM B
GO
CREATE TABLE C(E INT)
SELECT * FROM C
GO

CREATE PROC P_C
AS
BEGIN
DECLARE @RESULT INT
SELECT @RESULT=(SELECT ISNULL(SUM(A),0)+ISNULL(SUM(B),0) FROM A) + (SELECT ISNULL(SUM(C),0)+ISNULL(SUM(D),0) FROM B)

IF EXISTS(SELECT 1 FROM C)
UPDATE C SET E=@RESULT
ELSE
INSERT C(E) SELECT @RESULT
END
GO

CREATE TRIGGER T_A ON A FOR INSERT,UPDATE,DELETE
AS
BEGIN
EXEC P_C
END
GO
CREATE TRIGGER T_B ON B FOR INSERT,UPDATE,DELETE
AS
BEGIN
EXEC P_C
END
GO

INSERT A(A,B) SELECT 1,5
INSERT A(A,B) SELECT 2,5
INSERT B(C,D) SELECT 2,3
--DELETE FROM A WHERE A=2

SELECT * FROM C

DROP PROC P_C
DROP TRIGGER T_A,T_B
DROP TABLE A,B,C
[解决办法]
----------CREATE TEST ENVIRONMENT------

CREATE TABLE TABLE_A([ID] INT, A INT, B INT)
SELECT * FROM TABLE_A
GO
CREATE TABLE TABLE_B([ID] INT, C INT, D INT)
SELECT * FROM TABLE_B
GO
CREATE TABLE TABLE_C([ID] INT, E INT)
SELECT * FROM TABLE_C
GO

-------SQL---------

CREATE PROC P_C
AS
BEGIN

DECLARE @E INT
DECLARE @ID INT
DECLARE CUR_TEST CURSOR
FOR
SELECT ISNULL(TABLE_A.[ID], TABLE_B.[ID])
,(ISNULL(A, 0)+ISNULL(B, 0) + ISNULL(C,0) + ISNULL(D,0))

FROM TABLE_A FULL JOIN TABLE_B
ON TABLE_A.[ID] = TABLE_B.[ID]

OPEN CUR_TEST

FETCH NEXT FROM CUR_TEST
INTO @ID, @E

WHILE @@FETCH_STATUS = 0
BEGIN

IF EXISTS(SELECT 1 FROM TABLE_C WHERE [ID] = @ID)
UPDATE TABLE_C SET E=@E WHERE [ID] = @ID
ELSE
INSERT TABLE_C SELECT @ID, @E



FETCH NEXT FROM CUR_TEST
INTO @ID, @E
END

CLOSE CUR_TEST
DEALLOCATE CUR_TEST
END

GO

CREATE TRIGGER T_A ON TABLE_A FOR INSERT,UPDATE,DELETE
AS
BEGIN
EXEC P_C
END
GO
CREATE TRIGGER T_B ON TABLE_B FOR INSERT,UPDATE,DELETE
AS
BEGIN
EXEC P_C
END
GO

INSERT TABLE_A SELECT 1,5,5
INSERT TABLE_A SELECT 2,5,5
INSERT TABLE_B SELECT 2,3,5

-------CHECK ----
SELECT * FROM TABLE_A
SELECT * FROM TABLE_B
SELECT * FROM TABLE_C
GO

--------DELETE TEST ENVIRONMENT

DROP PROC P_C
DROP TRIGGER T_A,T_B
DROP TABLE TABLE_A,TABLE_B,TABLE_C

---------RESULT
ID A B
----------- ----------- -----------

(0 件処理されました)

ID C D


----------- ----------- -----------

(0 件処理されました)

ID E
----------- -----------

(0 件処理されました)


(1 件処理されました)


(1 件処理されました)


(1 件処理されました)


(1 件処理されました)


(1 件処理されました)


(1 件処理されました)


(1 件処理されました)


(1 件処理されました)

ID A B
----------- ----------- -----------
1 5 5
2 5 5

(2 件処理されました)

ID C D
----------- ----------- -----------
2 3 5

(1 件処理されました)

ID E
----------- -----------
1 10
2 18

(2 件処理されました)



[解决办法]
insert into c(e) select (a+b+(select c+d from b)) from a

这种类型的结构不行吗?

热点排行