SQL汇总问题(感觉好难。求助高手,不胜感激)

sowinworkTwo 2018-08-29 09:37:56
现有表 付款单号 金额 票据号 票据金额
PA00016 1000 T001 200
PA00016 1000 T002 700
PA00016 1000 T003 500
PA00016 1000 T004 800
PA00017 1200 T001 200
PA00017 1200 T002 700
PA00017 1200 T003 500
PA00017 1200 T004 800


需要的结果PA00016,PA00017 2200 T001,T002,T003,T004 2200
感觉好难。求助高手,不胜感激。
...全文
218 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sowinworkTwo 2018-08-29
  • 打赏
  • 举报
回复
好的,谢谢,我先看测试一下再回您,谢谢。
二月十六 2018-08-29
  • 打赏
  • 举报
回复
看看行不行
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([付款单号] nvarchar(27),[金额] int,[票据号] nvarchar(24),[票据金额] int)
Insert #T
select N'PA00016',1000,N'T001',200 union all
select N'PA00016',1000,N'T002',700 union all
select N'PA00016',1000,N'T003',500 union all
select N'PA00016',1000,N'T004',800 union all
select N'PA00017',1200,N'T001',200 union all
select N'PA00017',1200,N'T002',700 union all
select N'PA00017',1200,N'T003',500 union all
select N'PA00017',1200,N'T004',800
Go
--测试数据结束
;WITH cte AS (
SELECT
付款单号,
金额,
STUFF(
(
SELECT
',' + [票据号]
FROM
#T
WHERE
付款单号 = a.付款单号
FOR XML PATH('')
), 1, 1, ''
) AS [票据号],
SUM(票据金额) 票据金额
FROM
#T a
GROUP BY
付款单号,
金额)
SELECT
STUFF(
(
SELECT
',' + 付款单号
FROM
cte
WHERE
票据号 = a.票据号
FOR XML PATH('')
), 1, 1, ''
) 付款单号,
SUM(a.金额) 金额,
票据号,
a.票据金额
FROM
cte a
GROUP BY
票据号,
a.票据金额;


sowinworkTwo 2018-08-29
  • 打赏
  • 举报
回复
T001,T002,T003,T004(这四张单合计金额2200元) 分2次付款了(用付款单PA00016 金额1000元,PA00017 金额1200元)。现在要对应起来。
sowinworkTwo 2018-08-29
  • 打赏
  • 举报
回复
业务是这样的:用付款单PA00016 金额1000元,PA00017 金额1200元,支付了四张货款单T001,T002,T003,T004(这四张单合计金额2200元)
二月十六 2018-08-29
  • 打赏
  • 举报
回复
最后一个2200是每个单号的和,然后金额那里的2200又是所有单号的和?
二月十六 2018-08-29
  • 打赏
  • 举报
回复
规则是什么?
sowinworkTwo 2018-08-29
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
看看行不行
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([付款单号] nvarchar(27),[金额] int,[票据号] nvarchar(24),[票据金额] int)
Insert #T
select N'PA00016',1000,N'T001',200 union all
select N'PA00016',1000,N'T002',700 union all
select N'PA00016',1000,N'T003',500 union all
select N'PA00016',1000,N'T004',800 union all
select N'PA00017',1200,N'T001',200 union all
select N'PA00017',1200,N'T002',700 union all
select N'PA00017',1200,N'T003',500 union all
select N'PA00017',1200,N'T004',800
Go
--测试数据结束
;WITH cte AS (
SELECT
付款单号,
金额,
STUFF(
(
SELECT
',' + [票据号]
FROM
#T
WHERE
付款单号 = a.付款单号
FOR XML PATH('')
), 1, 1, ''
) AS [票据号],
SUM(票据金额) 票据金额
FROM
#T a
GROUP BY
付款单号,
金额)
SELECT
STUFF(
(
SELECT
',' + 付款单号
FROM
cte
WHERE
票据号 = a.票据号
FOR XML PATH('')
), 1, 1, ''
) 付款单号,
SUM(a.金额) 金额,
票据号,
a.票据金额
FROM
cte a
GROUP BY
票据号,
a.票据金额;




谢谢您的帮忙。
流年丶痞子 2018-08-29
  • 打赏
  • 举报
回复
分组可以嘛,

27,579

社区成员

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

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