关于财务对账两表视图问题

风从北来 自学成才 工程师  2018-06-29 06:26:03



一个进货,一个出货,主要是核对往来账
可以用视图体现出公司 年 月 付款和进货情况么,因为某些年月有重合有未重合的.
最后希望得到的视图是

公司 |年 |月 |付款金额合计 |货款金额合计
如果当月没有数值可以为0
分数不多,不过也要厚着脸请教!!!
/*
Source Server : sqlserver
Source Server Version : 105000
Source Database : Demo
Source Schema : dbo


*/


-- ----------------------------
-- Table structure for 财务付款
-- ----------------------------
DROP TABLE [dbo].[财务付款]
GO
CREATE TABLE [dbo].[财务付款] (
[id] int NOT NULL IDENTITY(1,1) ,
[收款公司] varchar(100) NULL ,
[付款日期] date NULL ,
[付款金额] decimal(12,2) NULL ,
[摘要] varchar(100) NULL
)


GO
DBCC CHECKIDENT(N'[dbo].[财务付款]', RESEED, 7)
GO

-- ----------------------------
-- Records of 财务付款
-- ----------------------------
SET IDENTITY_INSERT [dbo].[财务付款] ON
GO
INSERT INTO [dbo].[财务付款] ([id], [收款公司], [付款日期], [付款金额], [摘要]) VALUES (N'2', N'A', N'2018-04-01', N'10000.00', N'演示数据')
GO
GO
INSERT INTO [dbo].[财务付款] ([id], [收款公司], [付款日期], [付款金额], [摘要]) VALUES (N'3', N'A', N'2018-05-10', N'20000.00', null)
GO
GO
INSERT INTO [dbo].[财务付款] ([id], [收款公司], [付款日期], [付款金额], [摘要]) VALUES (N'4', N'A', N'2018-02-01', N'5000.00', null)
GO
GO
INSERT INTO [dbo].[财务付款] ([id], [收款公司], [付款日期], [付款金额], [摘要]) VALUES (N'5', N'B', N'2018-04-10', N'100000.00', null)
GO
GO
INSERT INTO [dbo].[财务付款] ([id], [收款公司], [付款日期], [付款金额], [摘要]) VALUES (N'6', N'B', N'2018-05-09', N'30000.00', null)
GO
GO
INSERT INTO [dbo].[财务付款] ([id], [收款公司], [付款日期], [付款金额], [摘要]) VALUES (N'7', N'B', N'2018-06-12', N'50000.00', null)
GO
GO
SET IDENTITY_INSERT [dbo].[财务付款] OFF
GO

-- ----------------------------
-- Indexes structure for table 财务付款
-- ----------------------------

-- ----------------------------
-- Primary Key structure for table 财务付款
-- ----------------------------
ALTER TABLE [dbo].[财务付款] ADD PRIMARY KEY ([id])
GO



/*
Source Server : sqlserver
Source Server Version : 105000
Source Database : Demo
Source Schema : dbo


*/


-- ----------------------------
-- Table structure for 销售公司
-- ----------------------------
DROP TABLE [dbo].[销售公司]
GO
CREATE TABLE [dbo].[销售公司] (
[id] int NOT NULL IDENTITY(1,1) ,
[销货公司] varchar(100) NULL ,
[销货日期] date NULL ,
[销货金额] decimal(12,2) NULL ,
[数量] decimal(12,2) NULL ,
[单价] decimal(12,2) NULL ,
[计量单位] varchar(100) NULL
)


GO
DBCC CHECKIDENT(N'[dbo].[销售公司]', RESEED, 8)
GO

-- ----------------------------
-- Records of 销售公司
-- ----------------------------
SET IDENTITY_INSERT [dbo].[销售公司] ON
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'1', N'A', N'2018-04-04', N'10000.00', N'10.00', N'1000.00', N'吨')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'2', N'A', N'2018-03-01', N'80000.00', N'10.00', N'8000.00', N'吨')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'3', N'A', N'2018-06-07', N'10000.00', N'20.00', N'500.00', N'吨')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'4', N'B', N'2018-03-07', N'10000.00', N'20.00', N'500.00', N'升')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'5', N'B', N'2018-04-01', N'30000.00', N'15.00', N'2000.00', N'升')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'6', N'B', N'2018-02-10', N'80000.00', N'200.00', N'400.00', N'克')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'7', N'A', N'2018-02-03', N'900.00', N'30.00', N'30.00', N'米')
GO
GO
INSERT INTO [dbo].[销售公司] ([id], [销货公司], [销货日期], [销货金额], [数量], [单价], [计量单位]) VALUES (N'8', N'B', N'2018-01-01', N'300.00', N'10.00', N'30.00', N'只')
GO
GO
SET IDENTITY_INSERT [dbo].[销售公司] OFF
GO

-- ----------------------------
-- Indexes structure for table 销售公司
-- ----------------------------

-- ----------------------------
-- Primary Key structure for table 销售公司
-- ----------------------------
ALTER TABLE [dbo].[销售公司] ADD PRIMARY KEY ([id])
GO




...全文
113 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
风从北来 2018-06-30
;WITH ctea AS (
这句前面的分号可以去掉,也可能和调试工具有关.
回复
风从北来 2018-06-30
ROW_NUMBER() over(order By ctea.销货公司) as ID
自己加了一个虚拟id,作为主键,已经可以用了,谢谢 二月十六 版主的指点.验证通过
效果图如下


回复
风从北来 2018-06-30
declare sql语句没问题,就是视图提示错误.
回复
二月十六 2018-06-30
;WITH ctea AS (
SELECT 销货公司,
YEAR(销货日期) AS 年,
MONTH(销货日期) AS 月,
SUM(销货金额) AS 销货金额合计
FROM [销售公司]
GROUP BY 销货公司,
YEAR(销货日期),
MONTH(销货日期)
),cteb AS (
SELECT 收款公司,
YEAR(付款日期) AS 年,
MONTH(付款日期) AS 月,
SUM(付款金额) AS 付款金额合计
FROM [财务付款]
GROUP BY 收款公司,
YEAR(付款日期),
MONTH(付款日期)
)
SELECT ISNULL(ctea.销货公司, cteb.收款公司) AS 公司,
ISNULL(ctea.年, cteb.年) AS 年,
ISNULL(ctea.月, cteb.月) AS 月,
ISNULL(付款金额合计,0) AS 付款金额合计,
ISNULL(销货金额合计,0) AS 销货金额合计
FROM ctea
FULL JOIN cteb
ON cteb.年 = ctea.年
AND cteb.月 = ctea.月
AND ctea.销货公司 = cteb.收款公司;
回复
风从北来 2018-06-30
告诉我,语法错误,这个是存储过程?
回复
RINK_1 2018-06-29


declare @year varchar(5)

set @year='2018'

;with cte
as
(select @year as yr,1 as mon
union all
select yr,mon+1 from cte
where mon+1<=12)

select A.*,B.total_pay,C.total_sale
from
(select * from cte A
join (select 收款公司 as 公司 from 财务付款
union
select 销货公司 from 销售公司) as B on 1=1) as A
left join
(select 收款公司,year(付款日期) as pay_year,month(付款日期) as pay_month,SUM(付款金额) as total_pay
from 财务付款
group by 收款公司,year(付款日期),month(付款日期)) as B on A.yr=B.pay_year and A.mon=B.pay_month and A.公司=B.收款公司
left join
(select 销货公司,year(销货日期) as sale_year,month(销货日期) as sale_month,SUM(销货金额) as total_sale
from 销售公司
group by 销货公司,year(销货日期),month(销货日期)) as C on A.yr=C.sale_year and A.mon=C.sale_month and A.公司=C.销货公司


回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2018-06-29 06:26
社区公告
暂无公告