34,593
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE 表A
(
账号 VARCHAR(10),
利息 DECIMAL(10,2),
利率 DECIMAL(4,2)
)
CREATE TABLE 表B
(
账号 VARCHAR(10),
地区号 VARCHAR(10),
账户名称 VARCHAR(10)
)
CREATE TABLE 表C
(
账号 VARCHAR(10),
OCX号 VARCHAR(10)
)
CREATE TABLE 表D
(
地区号 VARCHAR(10),
OCX号 VARCHAR(10),
账户名称 VARCHAR(10),
账号 VARCHAR(10),
余额 DECIMAL(10,2)
)
INSERT INTO 表B
SELECT '955881212','4041','瑞信公司' UNION ALL
SELECT '955881313','4041','瑞信公司' UNION ALL
SELECT '955881414','4041','瑞信公司' UNION ALL
SELECT '955881717','4042','瑞信公司' UNION ALL
SELECT '955881818','4042','瑞信公司'
INSERT INTO 表A
SELECT '955881212',1000,1 UNION ALL
SELECT '955881313',1500,1 UNION ALL
SELECT '955881414',1000,1 UNION ALL
SELECT '955881717',5000,1 UNION ALL
SELECT '955881818',5000,1
INSERT INTO 表C
SELECT '955881212','1010' UNION ALL
SELECT '955881313','1010' UNION ALL
SELECT '955881414','1010' UNION ALL
SELECT '955881717','1010' UNION ALL
SELECT '955881818','1010'
--1.
INSERT INTO 表D(账号,余额)
SELECT 账号,利息/利率 FROM 表A
SELECT * FROM 表D
--2
update 表d
set 表d.地区号=表b.地区号 , 表d.账户名称=表b.账户名称
from 表B
where 表D.账号 like 表B.账号
--3
update 表d
set 表d.OCX号=表c.OCX号
from 表c
where 表D.账号 like 表c.账号
--4
--先自定义函数,用于字符串拼接
CREATE FUNCTION [dbo].[fun_strAppend](@areaID VARCHAR(10),@ocxID VARCHAR(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + 账号 FROM 表D where 地区号=@areaID and ocx号=@ocxID
return STUFF(@str, 1, 1, '')
END
--自定义函数结束
select 地区号 ,ocx号 ,账户名称, dbo.fun_strAppend(地区号,ocx号) as '账号',sum(余额)as '余额'
from 表D
group by 地区号 , ocx号 , 账户名称
--5
select 地区号 ,ocx号 ,账户名称, dbo.fun_strAppend(地区号,ocx号) as '账号',sum(余额)as '余额'
into d1--d2,d3,d4
from 表D
group by 地区号 , ocx号 , 账户名称
select d1.地区号,d1.ocx号,d1.账户名称,
d1.余额 as '1月份余额',d2.余额 as '2月份余额',d3.余额 as '3月份余额',d4.余额 as '4月份余额'
from d1
left join d2 on d1.地区号=d2.地区号 and d1.ocx号=d2.ocx号
left join d3 on d1.地区号=d3.地区号 and d1.ocx号=d3.ocx号
left join d4 on d1.地区号=d4.地区号 and d1.ocx号=d4.ocx号
--这里我用的d1作左连接,其实我觉得应该有一个地区号和ocx号的总表
CREATE TABLE 表A
(
账号 VARCHAR(10),
利息 DECIMAL(10,2),
利率 DECIMAL(4,2)
)
CREATE TABLE 表B
(
账号 VARCHAR(10),
地区号 VARCHAR(10),
账户名称 VARCHAR(10)
)
CREATE TABLE 表C
(
账号 VARCHAR(10),
OCX号 VARCHAR(10)
)
CREATE TABLE 表D
(
地区号 VARCHAR(10),
OCX号 VARCHAR(10),
账户名称 VARCHAR(10),
账号 VARCHAR(10),
余额 DECIMAL(10,2)
)
INSERT INTO 表B
SELECT '955881212','4041','瑞信公司' UNION ALL
SELECT '955881313','4041','瑞信公司' UNION ALL
SELECT '955881414','4041','瑞信公司' UNION ALL
SELECT '955881717','4042','瑞信公司' UNION ALL
SELECT '955881818','4042','瑞信公司'
INSERT INTO 表A
SELECT '955881212',1000,1 UNION ALL
SELECT '955881313',1500,1 UNION ALL
SELECT '955881414',1000,1 UNION ALL
SELECT '955881717',5000,1 UNION ALL
SELECT '955881818',5000,1
INSERT INTO 表C
SELECT '955881212','1010' UNION ALL
SELECT '955881313','1010' UNION ALL
SELECT '955881414','1010' UNION ALL
SELECT '955881717','1010' UNION ALL
SELECT '955881818','1010'
--1.
INSERT INTO 表D(账号,余额)
SELECT 账号,利息/利率 FROM 表A
SELECT * FROM 表D
--2.
UPDATE 表D
SET 地区号=表B.地区号,账户名称=表B.账户名称
FROM 表D JOIN 表B ON 表D.账号=表B.账号
SELECT * FROM 表D
--3.
UPDATE 表D
SET OCX号=表C.OCX号
FROM 表D JOIN 表C ON 表D.账号=表C.账号
SELECT * FROM 表D
--4.
SELECT 地区号
,OCX号
,账户名称
,STUFF((SELECT ','+账号 FROM 表D B WHERE B.地区号=A.地区号 AND B.OCX号=A.OCX号 AND B.账户名称=A.账户名称 FOR XML PATH('')),1,1,'') AS 账号
,SUM(余额) AS 余额
INTO D4 --D2,D3,D4
FROM 表D A GROUP BY 地区号,OCX号,账户名称
--5.
;WITH CTE AS
(
SELECT *, 1 AS 月份 FROM D1 UNION ALL
SELECT *, 2 AS 月份 FROM D2 UNION ALL
SELECT *, 3 AS 月份 FROM D3 UNION ALL
SELECT *, 4 AS 月份 FROM D4
)
SELECT * INTO E FROM CTE
PIVOT(SUM(余额) FOR 月份 IN([1],[2],[3],[4])) AS P
SELECT *FROM E
create table tb(地区号 int,OCX号 int,账户名称 nvarchar(10),账号 varchar(10),余额 int)
insert into tb select 4041,1010,'瑞信公司','955881212',1000
insert into tb select 4041,1010,'瑞信公司','955881313',1500
insert into tb select 4041,1010,'瑞信公司','955881414',1000
insert into tb select 4042,1010,'瑞信公司','955881717',5000
insert into tb select 4042,1010,'瑞信公司','955881818',5000
go
select 地区号,OCX号,账户名称,stuff((select ','+账号 from tb where 地区号=a.地区号 and OCX号=a.OCX号 for xml path('')),1,1,'') as 账号,sum(余额) as 余额
from tb a group by 地区号,OCX号,账户名称
go
drop table tb
/*
地区号 OCX号 账户名称 账号 余额
----------- ----------- ---------- ---------------------------------------------------
4041 1010 瑞信公司 955881212,955881313,955881414 3500
4042 1010 瑞信公司 955881717,955881818 10000
(2 行受影响)
*/