这个组合查询要怎么写

etonchan 2018-12-04 12:00:54
我有表AAA,如下明细:
销售日期 销售单号 货品 销售量
2018-9-1 101 A01 2
2018-9-1 101 A02 1
2018-9-2 102 A01 1
2018-9-2 102 A02 2
2018-9-2 102 A03 1
2018-9-3 103 A01 1
2018-9-3 103 A02 2
2018-9-3 103 A04 1
2018-9-3 103 A05 3
2018-9-3 104 A02 2

想查询以下组合货品明细:
货品A 货品B 包含A的销售单数 包含B的销售单数 同时包含A+B的销售单数 总销售单数
A01 A02 3 4 3 4
A01 A03 3 1 1 4
A01 A04 3 1 1 4
A01 A05 3 1 1 4
A02 A03 4 1 1 4
A02 A04 4 1 1 4
A02 A05 4 1 1 4
A03 A04 1 1 0 4
A03 A05 1 1 0 4
A04 A05 1 1 1 4

这个sql要怎样写,请帮忙看看,谢谢!
...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear SQL(燊) 2018-12-04
  • 打赏
  • 举报
回复
drop table if exists #list
select dates=cast('2018-9-1' as datetime),docno='101',goodcode='A01',qty=2 into #list union all
select dates=cast('2018-9-1' as datetime),docno='101',goodcode='A02',qty=1 union all
select dates=cast('2018-9-2' as datetime),docno='102',goodcode='A01',qty=1 union all
select dates=cast('2018-9-2' as datetime),docno='102',goodcode='A02',qty=2 union all
select dates=cast('2018-9-2' as datetime),docno='102',goodcode='A03',qty=1 union all
select dates=cast('2018-9-3' as datetime),docno='103',goodcode='A01',qty=1 union all
select dates=cast('2018-9-3' as datetime),docno='103',goodcode='A02',qty=2 union all
select dates=cast('2018-9-3' as datetime),docno='103',goodcode='A04',qty=1 union all
select dates=cast('2018-9-3' as datetime),docno='103',goodcode='A05',qty=3 union all
select dates=cast('2018-9-3' as datetime),docno='104',goodcode='A02',qty=2

declare @sumdoc int=(select count(distinct docno) from #list)
;
with list as(
	select goodcode,doccount=count(distinct docno)
	from #list
	group by goodcode
),goods as (
	select docno,goodslist=(select goodcode+',' from #list a where a.docno=#list.docno  for xml PATH(''))
	from #list
	group by docno
)
select a.goodcode,b.goodcode,a.doccount,b.doccount,'a+b'=(select count(*) from goods where charindex(a.goodcode,','+goodslist)>0 and charindex(b.goodcode,','+goodslist)>0)
	,sumdoc=@sumdoc
from list a
inner join list b on a.goodcode<b.goodcode
etonchan 2018-12-04
  • 打赏
  • 举报
回复
如单号102,出现组合货品A+B就有A01+A02,和A101+A103
etonchan 2018-12-04
  • 打赏
  • 举报
回复
因为A05,任何一张单号上,没有出现2个以上的组合货品。
早起晚睡 2018-12-04
  • 打赏
  • 举报
回复
我没看行白!不知道他想要什么!!!
二月十六 2018-12-04
  • 打赏
  • 举报
回复
货品A和B是怎么区分的?A05为什么不是货品A?

22,206

社区成员

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

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