请指教根据选择日期做月份销售对比

冥思-苦想 2018-08-12 11:05:57
原数据:
日期 客户编号 金额 数量
2017-07-08 010294 91.00000000 7.00000000
2017-08-01 010294 42.00000000 2.00000000
2017-08-28 010001 3078.00000000 180.00000000
2017-07-28 010001 615.6 36.00000000


结果:
客户编号 7月销售额 7月数量 8月销售额 8月数量 差额
010001 615.6 36 3078.00 180 2462
010294 91.00 7 42.00 2 -49
...全文
192 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
墙头上乘凉 2018-08-15
  • 打赏
  • 举报
回复
引用 6 楼 qq_36501312 的回复:
那列数应该如何确定呢??如果传进来5个月份,如何创建15个列和差额计算?
日期是不定的。


你试试用动态SQL+1楼的方法
冥思-苦想 2018-08-12
  • 打赏
  • 举报
回复
那列数应该如何确定呢??如果传进来5个月份,如何创建15个列和差额计算?
日期是不定的。
卖水果的net 2018-08-12
  • 打赏
  • 举报
回复
你直接传上两个日期过来就可以了,结果不会有问题的。

PS:楼主是不是在考虑标题的事儿 ?
冥思-苦想 2018-08-12
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
[quote=引用 2 楼 qq_36501312 的回复:]
[quote=引用 1 楼 sinat_28984567 的回复:]


每个月算合计,并且起始和结束日期不固定;
这个样是可以但会有问题[/quote]

你得在你自己的程序中把日期传过来。具体怎么传,是程序的问题,跟 sql 语句没有关系了。[/quote]
这个我知道,问题是只有客户是固定的金额,数量,差额都是临时计算的尤其是差额,是本月减上月的,这样就处理不了;
卖水果的net 2018-08-12
  • 打赏
  • 举报
回复
引用 2 楼 qq_36501312 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:]
每个月算合计,并且起始和结束日期不固定; 这个样是可以但会有问题[/quote] 你得在你自己的程序中把日期传过来。具体怎么传,是程序的问题,跟 sql 语句没有关系了。
冥思-苦想 2018-08-12
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Date,[客户编号] nvarchar(26),[金额] decimal(18,14),[数量] decimal(18,14))
Insert #T
select '2017-07-08',N'010294',91.00000000,7.00000000 union all
select '2017-08-01',N'010294',42.00000000,2.00000000 union all
select '2017-08-28',N'010001',3078.00000000,180.00000000 union all
select '2017-07-28',N'010001',615.6,36.00000000
Go
--测试数据结束
SELECT
a.客户编号,
a.金额 AS [7月销售额],
a.数量 AS [7月数量],
b.金额 AS [8月销售额],
b.数量 AS [8月数量],
b.金额 - a.金额 AS 差额
FROM
#T a
JOIN
#T b
ON b.客户编号 = a.客户编号
AND DATEDIFF(MONTH, '2017-07-01', a.日期) = 0
AND DATEDIFF(MONTH, '2017-08-01', b.日期) = 0;




每个月算合计,并且起始和结束日期不固定;
这个样是可以但会有问题
二月十六 2018-08-12
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Date,[客户编号] nvarchar(26),[金额] decimal(18,14),[数量] decimal(18,14))
Insert #T
select '2017-07-08',N'010294',91.00000000,7.00000000 union all
select '2017-08-01',N'010294',42.00000000,2.00000000 union all
select '2017-08-28',N'010001',3078.00000000,180.00000000 union all
select '2017-07-28',N'010001',615.6,36.00000000
Go
--测试数据结束
SELECT
a.客户编号,
a.金额 AS [7月销售额],
a.数量 AS [7月数量],
b.金额 AS [8月销售额],
b.数量 AS [8月数量],
b.金额 - a.金额 AS 差额
FROM
#T a
JOIN
#T b
ON b.客户编号 = a.客户编号
AND DATEDIFF(MONTH, '2017-07-01', a.日期) = 0
AND DATEDIFF(MONTH, '2017-08-01', b.日期) = 0;


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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