求应付款减已付款得出未付款及付款比值
求应付款减已付款得出未付款及付款比率
表A(应付款明细)有A1(年月日),A2(供应商编号),A3(发票类型),A4(应付金额)列数据如下:
A1 A2 A3 A4
20141102 zz1 Y 800
20141115 zz1 Y 999
20141116 zz1 N 444
20141202 zz1 Y 555
20141127 as1 Y 333
20141127 as1 Y 222
20141129 as1 N 110
20141210 as1 Y 800
表B(已付款明细)有B1(年月日),B2(供应商编号),B3(已付款金额)列数据如下:
B1 B2 B3
20141105 zz1 100
20141128 zz1 200
20141214 zz1 300
20141130 as1 150
20141219 as1 300
20141226 as1 200
需求结果如下
Y1 201411月 201412月 应付款合计 201411月 201412月 已付款合计 未付款合计 全年已付款比率(%)
zz1 1355 555 1910 300 300 600 1310 31.41
as1 445 800 1245 150 500 650 595 52.21
A表与B表由A2=B2进行关联
应付款合计列:按月统计(当A3列为Y时将A4列数据相加)-(当A3列为N时将A4列数据相加)
已付款合计列:全计已付款金额合计
未付款合计列:应付款合计列 - 已付款合计列
全年已付款比率列:已付款合计列 / 应付款合计
以上只是列出11与12月份的应付款
报表需可按某个月,某几个月进查询
创建表
CREATE TABLE [dbo].[A](
[A1] [char](8) NOT NULL,
[A2] [char](4) NOT NULL,
[A3] [char](2) NOT NULL,
[A4] [numeric](18, 0) NULL)
INSERT INTO A VALUES('20141102','zz1','Y',800)
INSERT INTO A VALUES('20141115','zz1','Y',999)
INSERT INTO A VALUES('20141116','zz1','N',444)
INSERT INTO A VALUES('20141202','zz1','Y',555)
INSERT INTO A VALUES('20141127','as1','Y',333)
INSERT INTO A VALUES('20141127','as1','Y',222)
INSERT INTO A VALUES('20141129','as1','N',110)
INSERT INTO A VALUES('20141210','as1','Y',800)
SELECT * FROM A
------------------------------------------------
CREATE TABLE [dbo].[B](
[B1] [char](8) NOT NULL,
[B2] [char](4) NOT NULL,
[B3] [numeric](18, 0) NULL)
INSERT INTO B VALUES('20141105','zz1',100)
INSERT INTO B VALUES('20141128','zz1',200)
INSERT INTO B VALUES('20141214','zz1',300)
INSERT INTO B VALUES('20141130','as1',150)
INSERT INTO B VALUES('20141219','as1',300)
INSERT INTO B VALUES('20141226','as1',200)
SELECT * FROM B
------解决思路----------------------
表A(应付款明细)有A1(年月日),A2(供应商编号),A3(发票类型),A4(应付金额)列数据如下:
A1 A2 A3 A4
20141102 zz1 Y 800
20141115 zz1 Y 999
20141116 zz1 N 444
20141202 zz1 Y 555
20141127 as1 Y 333
20141127 as1 Y 222
20141129 as1 N 110
20141210 as1 Y 800
表B(已付款明细)有B1(年月日),B2(供应商编号),B3(已付款金额)列数据如下:
B1 B2 B3
20141105 zz1 100
20141128 zz1 200
20141214 zz1 300
20141130 as1 150
20141219 as1 300
20141226 as1 200
需求结果如下
Y1 201411月 201412月 应付款合计 201411月 201412月 已付款合计 未付款合计 全年已付款比率(%)
zz1 1355 555 1910 300 300 600 1310 31.41
as1 445 800 1245 150 500 650 595 52.21
A表与B表由A2=B2进行关联
应付款合计列:按月统计(当A3列为Y时将A4列数据相加)-(当A3列为N时将A4列数据相加)
已付款合计列:全计已付款金额合计
未付款合计列:应付款合计列 - 已付款合计列
全年已付款比率列:已付款合计列 / 应付款合计
以上只是列出11与12月份的应付款
报表需可按某个月,某几个月进查询
创建表
CREATE TABLE [dbo].[A](
[A1] [char](8) NOT NULL,
[A2] [char](4) NOT NULL,
[A3] [char](2) NOT NULL,
[A4] [numeric](18, 0) NULL)
INSERT INTO A VALUES('20141102','zz1','Y',800)
INSERT INTO A VALUES('20141115','zz1','Y',999)
INSERT INTO A VALUES('20141116','zz1','N',444)
INSERT INTO A VALUES('20141202','zz1','Y',555)
INSERT INTO A VALUES('20141127','as1','Y',333)
INSERT INTO A VALUES('20141127','as1','Y',222)
INSERT INTO A VALUES('20141129','as1','N',110)
INSERT INTO A VALUES('20141210','as1','Y',800)
SELECT * FROM A
------------------------------------------------
CREATE TABLE [dbo].[B](
[B1] [char](8) NOT NULL,
[B2] [char](4) NOT NULL,
[B3] [numeric](18, 0) NULL)
INSERT INTO B VALUES('20141105','zz1',100)
INSERT INTO B VALUES('20141128','zz1',200)
INSERT INTO B VALUES('20141214','zz1',300)
INSERT INTO B VALUES('20141130','as1',150)
INSERT INTO B VALUES('20141219','as1',300)
INSERT INTO B VALUES('20141226','as1',200)
SELECT * FROM B
------解决思路----------------------
DECLARE @SQL VARCHAR(8000),@COLUMN1 VARCHAR(8000),@COLUMN2 VARCHAR(8000)动态执行
SET @COLUMN1=''
SET @COLUMN2=''
SELECT @COLUMN1=@COLUMN1+',SUM(CASE WHEN T=1 AND CAST([A1]AS VARCHAR(6))='''+CAST([A1]AS VARCHAR(6))+''' THEN[A4]END)['+CAST([A1]AS VARCHAR(6))+'月]'
FROM A GROUP BY CAST([A1]AS VARCHAR(6))ORDER BY CAST([A1]AS VARCHAR(6))
SET @COLUMN1=@COLUMN1+',SUM(CASE WHEN T=1 THEN[A4]END)[应付款合计]'
SELECT @COLUMN2=@COLUMN2+',SUM(CASE WHEN T=2 AND CAST([A1]AS VARCHAR(6))='''+CAST([B1]AS VARCHAR(6))+''' THEN[A4]END)['+CAST([B1]AS VARCHAR(6))+'月]'
FROM B GROUP BY CAST([B1]AS VARCHAR(6))ORDER BY CAST([B1]AS VARCHAR(6))
SET @COLUMN2=@COLUMN2+',SUM(CASE WHEN T=2 THEN[A4]END)[已付款合计]'
SET @SQL='SELECT[A2]'+@COLUMN1+@COLUMN2+',SUM(CASE WHEN T=1 THEN[A4]END)-SUM(CASE WHEN T=2 THEN[A4]END)[未付款合计]'
+',100.0*SUM(CASE WHEN T=2 THEN[A4]END)/SUM(CASE WHEN T=1 THEN[A4]END)[全年已付款比率(%)]'
+'FROM(SELECT 1 T,[A1],[A2],[A4]FROM A WHERE[A3]=''Y''
UNION ALL SELECT 1 T,[A1],[A2],-[A4]FROM A WHERE[A3]=''N''
UNION ALL SELECT 2,[B1],[B2],[B3]FROM B)T'
+' GROUP BY[A2]'
EXEC(@SQL)