税额如何平摊到项目中,做到没有差额

来自外太空的你 2019-07-30 02:45:19


请教大神 在数据库查询中 如上增值税如何 按照金额 收货的金额 平摊到 每个品相的上,
因为 我所使用的是 采购总额/全部的总额*增值税 但是这样会造成除不尽的问题,使分摊后的总额 和 给出的总额不相等


望大师指导该如何写查询语句
以下为测试数据
id 公司货物名称 采购价格 收货数量 单位 采购总额 汇率 货币名称 采购单号 增值税
1 后勤部门物资 16.6 4 EACH 66.4 1 人名币 C-2019-07-01-100001 3213
2 (194)小牛臀肉 75 300 KG 22500 1 人名币 C-2019-07-13-100004
3 (国产) 平湖老鸡 16.6 220 KG 3652 1 人名币 C-2019-07-16-100006


...全文
252 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 唐诗三百首 的回复:

create table #t
(id int,公司货物名称 varchar(30),采购价格 decimal(18,1),收货数量 int,单位 varchar(10),采购总额 decimal(18,1),汇率 int,货币名称 varchar(10),采购单号 varchar(20),增值税 decimal(18,2))

insert into #t
select 1,'后勤部门物资',16.6,4,'EACH',66.4,1,'人名币','C-2019-07-01-100001',3213 union all
select 2,'(194)小牛臀肉',75,300,'KG',22500,1,'人名币','C-2019-07-13-100004',3213 union all
select 3,'(国产) 平湖老鸡',16.6,220,'KG',3652,1,'人名币','C-2019-07-16-100006',3213


-- 分摊增值税
;with t as
(select 采购总额,
增值税,
bl=采购总额/(select sum(采购总额) from #t),
rn=row_number() over(order by id)
from #t)
update t
set t.增值税=case when t.rn=(select max(rn) from t)
then t.增值税-(select sum(u.bl*u.增值税)
from t u
where u.rn<t.rn)
else t.bl*t.增值税 end
from t


-- 结果
select * from #t

/*
id 公司货物名称 采购价格 收货数量 单位 采购总额 汇率 货币名称 采购单号 增值税
----------- ------------------------------ --------------------------------------- ----------- ---------- --------------------------------------- ----------- ---------- -------------------- ---------------------------------------
1 后勤部门物资 16.6 4 EACH 66.4 1 人名币 C-2019-07-01-100001 8.14
2 (194)小牛臀肉 75.0 300 KG 22500.0 1 人名币 C-2019-07-13-100004 2757.32
3 (国产) 平湖老鸡 16.6 220 KG 3652.0 1 人名币 C-2019-07-16-100006 447.54

(3 行受影响)
*/


-- 验算
select 总增值税=sum(增值税) from #t

/*
总增值税
---------------------------------------
3213.00

(1 行受影响)
*/
高手!!
唐诗三百首 2019-07-31
  • 打赏
  • 举报
回复

create table #t
(id int,公司货物名称 varchar(30),采购价格 decimal(18,1),收货数量 int,单位 varchar(10),采购总额 decimal(18,1),汇率 int,货币名称 varchar(10),采购单号 varchar(20),增值税 decimal(18,2))

insert into #t
select 1,'后勤部门物资',16.6,4,'EACH',66.4,1,'人名币','C-2019-07-01-100001',3213 union all
select 2,'(194)小牛臀肉',75,300,'KG',22500,1,'人名币','C-2019-07-13-100004',3213 union all
select 3,'(国产) 平湖老鸡',16.6,220,'KG',3652,1,'人名币','C-2019-07-16-100006',3213


-- 分摊增值税
;with t as
(select 采购总额,
增值税,
bl=采购总额/(select sum(采购总额) from #t),
rn=row_number() over(order by id)
from #t)
update t
set t.增值税=case when t.rn=(select max(rn) from t)
then t.增值税-(select sum(u.bl*u.增值税)
from t u
where u.rn<t.rn)
else t.bl*t.增值税 end
from t


-- 结果
select * from #t

/*
id 公司货物名称 采购价格 收货数量 单位 采购总额 汇率 货币名称 采购单号 增值税
----------- ------------------------------ --------------------------------------- ----------- ---------- --------------------------------------- ----------- ---------- -------------------- ---------------------------------------
1 后勤部门物资 16.6 4 EACH 66.4 1 人名币 C-2019-07-01-100001 8.14
2 (194)小牛臀肉 75.0 300 KG 22500.0 1 人名币 C-2019-07-13-100004 2757.32
3 (国产) 平湖老鸡 16.6 220 KG 3652.0 1 人名币 C-2019-07-16-100006 447.54

(3 行受影响)
*/


-- 验算
select 总增值税=sum(增值税) from #t

/*
总增值税
---------------------------------------
3213.00

(1 行受影响)
*/
RINK_1 2019-07-30
  • 打赏
  • 举报
回复
引用 3 楼 来自外太空的你 的回复:
[quote=引用 1 楼 RINK_1 的回复:] 下面方法不知道是否可行:排个序,除最后一条数据,其它数据都用你说的那个计算方法计算,然后最后一条数据拿总额减去先前已经得到的其它数据的总和。
请问能实际操作下 演示下吗,这个我不知道怎么弄[/quote]

DECLARE @VAT DECIMAL(12,4)

SET @VAT=100

;WITH CTE
AS
(SELECT *,ROUND((PRICE/SUM(PRICE) OVER (PARTITION BY GETDATE()))*@VAT,2) AS APPORTION,
 MAX(ID) OVER (PARTITION BY GETDATE()) AS MAX_ID FROM #T)

SELECT *,
CASE WHEN ID<MAX_ID THEN APPORTION ELSE @VAT-SUBTOTAL END
FROM CTE A
CROSS APPLY (SELECT SUM(APPORTION) AS SUBTOTAL FROM CTE WHERE ID<A.ID) AS B
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:
下面方法不知道是否可行:排个序,除最后一条数据,其它数据都用你说的那个计算方法计算,然后最后一条数据拿总额减去先前已经得到的其它数据的总和。

但是我是批量查询 不只是几条数据
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:
下面方法不知道是否可行:排个序,除最后一条数据,其它数据都用你说的那个计算方法计算,然后最后一条数据拿总额减去先前已经得到的其它数据的总和。

请问能实际操作下 演示下吗,这个我不知道怎么弄
听雨停了 2019-07-30
  • 打赏
  • 举报
回复
按照你这么说,那就没有办法完全平摊了啊,比如说10块钱,分摊到三个人头上,不可能分的每个人一样多的啊
RINK_1 2019-07-30
  • 打赏
  • 举报
回复
下面方法不知道是否可行:排个序,除最后一条数据,其它数据都用你说的那个计算方法计算,然后最后一条数据拿总额减去先前已经得到的其它数据的总和。
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的详细知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需求,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧