求助,SQL帮忙大神解答下。关于统计的问题

Kyle_zzj 2018-04-02 10:51:47

图1

图2




图1是数据源,如何通过SQL语句来统计成像图2的结果。SQL里想不出好的办法。群里是否有大神,求帮忙解答下!!! 感谢感谢!
...全文
269 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kyle_zzj 2018-04-02
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
测试数据写的较少,意思是这么个意思
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([标记] nvarchar(24),[分区] nvarchar(26),[数量] int)
Insert #T
select N'A001',N'A-0001',380 union all
select N'A001',N'B-0002',260 union all
select N'A002',N'A-0002',80
Go
--测试数据结束
DECLARE @sql1 VARCHAR(8000)
SET @sql1='select 标记'
SELECT @sql1=@sql1+' , sum(case 分区 when '''+ 分区 +''' then 数量 else 0 end) ['+ 分区 +']'
from (SELECT DISTINCT 分区 from #T) as a
SET @sql1=@sql1+' , sum(数量) 总分 from #T group by 标记'
exec(@sql1) 
版主,如果这样的话。那如果有100多个分区。那要列出100多个分区列了。这样跟用户提出来的需求就不符合
Kyle_zzj 2018-04-02
  • 打赏
  • 举报
回复
附上源代码数据:

 Create table Stock(Identify nvarchar(20),Zone nvarchar(20),Qty int)
Insert Stock
select N'A001',N'A-0001',380 union all
select N'A001',N'B-0002',260 union all
select N'A001',N'C-0003',400 union all
select N'A002',N'A-0002',80 union all
select N'A002',N'A-0003',10 union all
select N'A003',N'A-0004',80 union all
select N'A003',N'A-0005',10 union all
select N'A003',N'C-0003',80 union all
select N'A003',N'C-0006',100 
二月十六 2018-04-02
  • 打赏
  • 举报
回复
测试数据写的较少,意思是这么个意思
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([标记] nvarchar(24),[分区] nvarchar(26),[数量] int)
Insert #T
select N'A001',N'A-0001',380 union all
select N'A001',N'B-0002',260 union all
select N'A002',N'A-0002',80
Go
--测试数据结束
DECLARE @sql1 VARCHAR(8000)
SET @sql1='select 标记'
SELECT @sql1=@sql1+' , sum(case 分区 when '''+ 分区 +''' then 数量 else 0 end) ['+ 分区 +']'
from (SELECT DISTINCT 分区 from #T) as a
SET @sql1=@sql1+' , sum(数量) 总分 from #T group by 标记'
exec(@sql1)


二月十六 2018-04-02
  • 打赏
  • 举报
回复
引用 3 楼 u010769363 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 测试数据写的较少,意思是这么个意思
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([标记] nvarchar(24),[分区] nvarchar(26),[数量] int)
Insert #T
select N'A001',N'A-0001',380 union all
select N'A001',N'B-0002',260 union all
select N'A002',N'A-0002',80
Go
--测试数据结束
DECLARE @sql1 VARCHAR(8000)
SET @sql1='select 标记'
SELECT @sql1=@sql1+' , sum(case 分区 when '''+ 分区 +''' then 数量 else 0 end) ['+ 分区 +']'
from (SELECT DISTINCT 分区 from #T) as a
SET @sql1=@sql1+' , sum(数量) 总分 from #T group by 标记'
exec(@sql1) 
版主,如果这样的话。那如果有100多个分区。那要列出100多个分区列了。这样跟用户提出来的需求就不符合[/quote] 你是想把分区和值分开,一行分区一行值,然后有多行分区多行值?不太好弄,因为读取的是不同列的数据,然后要显示到同一列上,而且没两行换一次。

22,210

社区成员

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

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