多条件统计,sql语句如何写呢?

qq_39528261 2018-02-01 08:49:18
1 2 规格 6 工作站 8 9 11 12 数量
T(L)-54 S0C0 AA1 13 A IN 11 3600
T(L)-54 S0C0 AA1 13 A IN 11 21656
T(L)-54 S0C0 AA1 13 B IN 11 3550
T(L)-54 S0J0 AA1 13 B IN 11 3550
T(L)-66 SPX0 AA1 13 B OUT 11 852
T(L)-66 S0J0 AA1 13 B IN 11 3500
T(L)-66 S0Y4 AA1 13 B IN 11 13500
T(L)-66 S0Y4 AA1 13 B IN 11 1540
T(L)-66 S0Y4 AA1 13 B IN 11 3450
T(L)-66 S0Y4 AA2 13 B IN 11 3450
T(L)-66 S0Y4 AA2 13 B IN 11 207
T(L)-66 S0Y4 AA2 13 A IN 11 3400
T-54 S000 AA2 13 A IN 8 1156
T-54 S000 AA2 13 A IN 8 540
T-54 SP00 AA2 13 A IN 8 1080
T-54 S000 AA2 13 B IN 8 640
T-54 SP00 AA2 13 A IN 8 18000
T-54 S000 AA2 13 B IN 8 480
T-54 S00Z AA1 13 A IN 8 3450
T-54 S00Z AA1 13 A IN 8 690
T-54 S00Z AA1 13 A IN 8 3400
T-54 S00Z AA7 13 A IN 8 1020
T-54 S00Z AA7 13 A IN 8 3350
T-66 S0F0 AA7 13 A OUT 8 938
T-66 SPF0 AA7 13 A OUT 8 3300
T-66 SPF0 AA7 13 A OUT 8 264
T-66 S0F0 AA1 13 B OUT 8 2340
T-66 SPF0 AA7 13 B OUT 8 3600
T(L)-66 8SCT AA1 13 A IN 11 1224
T(L)-66 8SCT AA1 13 A IN 11 3550
T(L)-66 8SCT AA1 13 B IN 11 3550
T(L)-66 8SCT AA1 13 A IN 11 1917
T-66 C AA1 13 A OUT 8 3500
T-66 C AA1 13 A OUT 8 1330
T-66 C AA1 13 B OUT 8 3450
T-66 C AA1 13 B OUT 8 2346
T-86 D AA1 13 B OUT 8 3400
T-86 D AA1 13 A OUT 8 136
T-54 FTP- AA1 13 A OUT 11 3283
T(L)-66 FTP- AA1 13 A OUT 11 1848
T(L)-66 FTP- AA1 13 A OUT 11 216
T(L)-66 FTP- AA1 13 A OUT 11 3550
T(L)-66 FTP- AA1 13 A OUT 11 3550
T-66 FTP- AA1 13 A OUT 8 1917
T-66 FTP- AA1 13 B OUT 8 3550
T(L)-66 SPX0 AA9 13 B OUT 11 3500
T(L)-66 SPX0 AA9 13 B OUT 11 3500
T(L)-66 S0J0 AA9 13 A IN 11 1330
T(L)-66 SPX0 AA9 13 A OUT 11 3450
T(L)-66 SPX0 AA9 13 A OUT 11 2760
T(L)-66 S0Y4 AA9 13 A IN 11 3400
T-54 S000 AA9 13 A IN 8 1876
T-54 SP00 AA9 13 B IN 8 3500
T-54 S000 AA9 13 B IN 8 576
T-54 SP00 AA9 13 B IN 8 720
T-54 SP00 AA9 13 B IN 8 720
T-54 S000 AA9 13 B IN 8 12244
T-54 S000 AA9 13 B IN 8 12094
T-54 S00Z AA9 13 B IN 8 22551
T-54 S00Z AA9 13 B IN 8 12227
T-54 S00Z AA9 13 A IN 8 600
T-54 S00Z AA9 13 A IN 8 180
T-66 SPF0 AA9 13 A OUT 8 180
T-66 SPF0 AA9 13 A OUT 8 180
T-66 SPF0 AA9 13 A OUT 8 360
T-66 SPF0 AA9 13 B OUT 8 480
T(L)-66 FSCG AA9 13 A OUT 11 756
T(L)-66 FSCT AA9 13 B OUT 11 160
T-54 C AA9 13 A OUT 8 160
T-86 D AA9 13 A OUT 8 2736
T(L)-54 FTP- AA9 13 B OUT 11 3550
T(L)-54 FTP- AA9 13 B OUT 11 2769
T(L)-54 FTP- AA9 13 B OUT 11 3500
T-54 YSP- AA9 13 B IN 8 3430
T-54 YSP- AA9 13 B IN 8 13450
T-54 YSP- AA9 13 A IN 8 1311
T-54 YSP- AA9 13 A IN 8 3332
T-66 FTP- AA9 13 A OUT 8 2680
T-66 FTP- AA9 13 A OUT 8 1914
T-66 FTP- AA9 13 A OUT 8 2015
T-66 FTP- AA9 13 A OUT 8 3168
T-66 FTP- AA9 13 B OUT 8 3479
T-66 C AB5 13 A OUT 8 3266
T-66 C AB5 13 B OUT 8 3500
T(L)-66 FTP- AB5 13 B OUT 11 3500
T(L)-66 FTP- AB5 13 A OUT 11 11221
T(L)-66 FTP- AB5 13 A OUT 11 3400
T(L)-66 FTP- AB5 13 B OUT 11 612
T(L)-66 FTP- AB5 13 B OUT 11 3216
T(L)-54 S0C0 AA5 13 B IN 11 1650
T(L)-54 S0C0 AA5 13 B IN 11 1040
T(L)-66 S0J0 AA5 13 B IN 11 3168
T(L)-66 S0J0 AA5 13 A IN 11 3500
T-50 S00Z AA5 13 A IN 8 3150
T-50 S00Z AA5 13 A IN 8 3450
T-54 S000 AA5 13 B IN 8 2415
T-54 S000 AA5 11 B IN 8 3400
T-54 S000 AA5 11 B IN 8 2176
F-60/84 8ECY AA5 23 B IN 10 3350
F-60/84 8ECY AA5 23 B IN 10 603
F-60/84 8ECY AA5 23 A IN 10 140
F-60/84 8ECY AA5 23 A IN 10 12451
F-78/96 8N5A AA5 23 A IN 10 1680
F-78/96 8NCA AA5 23 A IN 10 18547
F-78/96 8NCA AA5 23 A IN 10 540
...全文
338 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2018-02-01
  • 打赏
  • 举报
回复
引用 10 楼 qq_39528261 的回复:
感谢听雨停了,Null可以设置为空吗?


SELECT a.规格,
a.数量区间,
isnull(cast(a.AA1 AS VARCHAR(20)),'') AS AA1数量合计, --改空,多了一个cast( as varchar(20))
isnull(b.AA1,'') AS AA1批数, --改0
isnull(a.AA2,'') AS AA2数量合计,
isnull(b.AA2,'') AS AA2批数,
isnull(a.AA5,'') AS AA5数量合计,
isnull(b.AA5,'') AS AA5批数,
isnull(a.AA7,'') AS AA7数量合计,
isnull(b.AA7,'') AS AA7批数,
isnull(a.AA9,'') AS AA9数量合计,
isnull(b.AA9,'') AS AA9批数,
isnull(a.AB5,'') AS AB5数量合计,
isnull(b.AB5,'') AS AB5批数
FROM tab4 a
right JOIN Tab5 b
ON a.规格 = b.规格
AND a.数量区间=b.数量区间
ORDER BY a.规格

qq_39528261 2018-02-01
  • 打赏
  • 举报
回复
感谢听雨停了,Null可以设置为空吗?
听雨停了 2018-02-01
  • 打赏
  • 举报
回复
引用 8 楼 qq_39528261 的回复:
回:听雨停了
不用考虑哦!谢谢您


use Tempdb
go
--> --> 听雨停了-->生成测试数据

if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([规格] nvarchar(27),[6] nvarchar(24),[工作站] nvarchar(23),[8] int,[9] nvarchar(21),[11] nvarchar(23),[12] int,[数量] int)
Insert #tab
select N'T(L)-54',N'S0C0',N'AA1',13,N'A',N'IN',11,3600 union all
select N'T(L)-54',N'S0C0',N'AA1',13,N'A',N'IN',11,21656 union all
select N'T(L)-54',N'S0C0',N'AA1',13,N'B',N'IN',11,3550 union all
select N'T(L)-54',N'S0J0',N'AA1',13,N'B',N'IN',11,3550 union all
select N'T(L)-66',N'SPX0',N'AA1',13,N'B',N'OUT',11,852 union all
select N'T(L)-66',N'S0J0',N'AA1',13,N'B',N'IN',11,3500 union all
select N'T(L)-66',N'S0Y4',N'AA1',13,N'B',N'IN',11,13500 union all
select N'T(L)-66',N'S0Y4',N'AA1',13,N'B',N'IN',11,1540 union all
select N'T(L)-66',N'S0Y4',N'AA1',13,N'B',N'IN',11,3450 union all
select N'T(L)-66',N'S0Y4',N'AA2',13,N'B',N'IN',11,3450 union all
select N'T(L)-66',N'S0Y4',N'AA2',13,N'B',N'IN',11,207 union all
select N'T(L)-66',N'S0Y4',N'AA2',13,N'A',N'IN',11,3400 union all
select N'T-54',N'S000',N'AA2',13,N'A',N'IN',8,1156 union all
select N'T-54',N'S000',N'AA2',13,N'A',N'IN',8,540 union all
select N'T-54',N'SP00',N'AA2',13,N'A',N'IN',8,1080 union all
select N'T-54',N'S000',N'AA2',13,N'B',N'IN',8,640 union all
select N'T-54',N'SP00',N'AA2',13,N'A',N'IN',8,18000 union all
select N'T-54',N'S000',N'AA2',13,N'B',N'IN',8,480 union all
select N'T-54',N'S00Z',N'AA1',13,N'A',N'IN',8,3450 union all
select N'T-54',N'S00Z',N'AA1',13,N'A',N'IN',8,690 union all
select N'T-54',N'S00Z',N'AA1',13,N'A',N'IN',8,3400 union all
select N'T-54',N'S00Z',N'AA7',13,N'A',N'IN',8,1020 union all
select N'T-54',N'S00Z',N'AA7',13,N'A',N'IN',8,3350 union all
select N'T-66',N'S0F0',N'AA7',13,N'A',N'OUT',8,938 union all
select N'T-66',N'SPF0',N'AA7',13,N'A',N'OUT',8,3300 union all
select N'T-66',N'SPF0',N'AA7',13,N'A',N'OUT',8,264 union all
select N'T-66',N'S0F0',N'AA1',13,N'B',N'OUT',8,2340 union all
select N'T-66',N'SPF0',N'AA7',13,N'B',N'OUT',8,3600 union all
select N'T(L)-66',N'8SCT',N'AA1',13,N'A',N'IN',11,1224 union all
select N'T(L)-66',N'8SCT',N'AA1',13,N'A',N'IN',11,3550 union all
select N'T(L)-66',N'8SCT',N'AA1',13,N'B',N'IN',11,3550 union all
select N'T(L)-66',N'8SCT',N'AA1',13,N'A',N'IN',11,1917 union all
select N'T-66',N'C',N'AA1',13,N'A',N'OUT',8,3500 union all
select N'T-66',N'C',N'AA1',13,N'A',N'OUT',8,1330 union all
select N'T-66',N'C',N'AA1',13,N'B',N'OUT',8,3450 union all
select N'T-66',N'C',N'AA1',13,N'B',N'OUT',8,2346 union all
select N'T-86',N'D',N'AA1',13,N'B',N'OUT',8,3400 union all
select N'T-86',N'D',N'AA1',13,N'A',N'OUT',8,136 union all
select N'T-54',N'FTP-',N'AA1',13,N'A',N'OUT',11,3283 union all
select N'T(L)-66',N'FTP-',N'AA1',13,N'A',N'OUT',11,1848 union all
select N'T(L)-66',N'FTP-',N'AA1',13,N'A',N'OUT',11,216 union all
select N'T(L)-66',N'FTP-',N'AA1',13,N'A',N'OUT',11,3550 union all
select N'T(L)-66',N'FTP-',N'AA1',13,N'A',N'OUT',11,3550 union all
select N'T-66',N'FTP-',N'AA1',13,N'A',N'OUT',8,1917 union all
select N'T-66',N'FTP-',N'AA1',13,N'B',N'OUT',8,3550 union all
select N'T(L)-66',N'SPX0',N'AA9',13,N'B',N'OUT',11,3500 union all
select N'T(L)-66',N'SPX0',N'AA9',13,N'B',N'OUT',11,3500 union all
select N'T(L)-66',N'S0J0',N'AA9',13,N'A',N'IN',11,1330 union all
select N'T(L)-66',N'SPX0',N'AA9',13,N'A',N'OUT',11,3450 union all
select N'T(L)-66',N'SPX0',N'AA9',13,N'A',N'OUT',11,2760 union all
select N'T(L)-66',N'S0Y4',N'AA9',13,N'A',N'IN',11,3400 union all
select N'T-54',N'S000',N'AA9',13,N'A',N'IN',8,1876 union all
select N'T-54',N'SP00',N'AA9',13,N'B',N'IN',8,3500 union all
select N'T-54',N'S000',N'AA9',13,N'B',N'IN',8,576 union all
select N'T-54',N'SP00',N'AA9',13,N'B',N'IN',8,720 union all
select N'T-54',N'SP00',N'AA9',13,N'B',N'IN',8,720 union all
select N'T-54',N'S000',N'AA9',13,N'B',N'IN',8,12244 union all
select N'T-54',N'S000',N'AA9',13,N'B',N'IN',8,12094 union all
select N'T-54',N'S00Z',N'AA9',13,N'B',N'IN',8,22551 union all
select N'T-54',N'S00Z',N'AA9',13,N'B',N'IN',8,12227 union all
select N'T-54',N'S00Z',N'AA9',13,N'A',N'IN',8,600 union all
select N'T-54',N'S00Z',N'AA9',13,N'A',N'IN',8,180 union all
select N'T-66',N'SPF0',N'AA9',13,N'A',N'OUT',8,180 union all
select N'T-66',N'SPF0',N'AA9',13,N'A',N'OUT',8,180 union all
select N'T-66',N'SPF0',N'AA9',13,N'A',N'OUT',8,360 union all
select N'T-66',N'SPF0',N'AA9',13,N'B',N'OUT',8,480 union all
select N'T(L)-66',N'FSCG',N'AA9',13,N'A',N'OUT',11,756 union all
select N'T(L)-66',N'FSCT',N'AA9',13,N'B',N'OUT',11,160 union all
select N'T-54',N'C',N'AA9',13,N'A',N'OUT',8,160 union all
select N'T-86',N'D',N'AA9',13,N'A',N'OUT',8,2736 union all
select N'T(L)-54',N'FTP-',N'AA9',13,N'B',N'OUT',11,3550 union all
select N'T(L)-54',N'FTP-',N'AA9',13,N'B',N'OUT',11,2769 union all
select N'T(L)-54',N'FTP-',N'AA9',13,N'B',N'OUT',11,3500 union all
select N'T-54',N'YSP-',N'AA9',13,N'B',N'IN',8,3430 union all
select N'T-54',N'YSP-',N'AA9',13,N'B',N'IN',8,13450 union all
select N'T-54',N'YSP-',N'AA9',13,N'A',N'IN',8,1311 union all
select N'T-54',N'YSP-',N'AA9',13,N'A',N'IN',8,3332 union all
select N'T-66',N'FTP-',N'AA9',13,N'A',N'OUT',8,2680 union all
select N'T-66',N'FTP-',N'AA9',13,N'A',N'OUT',8,1914 union all
select N'T-66',N'FTP-',N'AA9',13,N'A',N'OUT',8,2015 union all
select N'T-66',N'FTP-',N'AA9',13,N'A',N'OUT',8,3168 union all
select N'T-66',N'FTP-',N'AA9',13,N'B',N'OUT',8,3479 union all
select N'T-66',N'C',N'AB5',13,N'A',N'OUT',8,3266 union all
select N'T-66',N'C',N'AB5',13,N'B',N'OUT',8,3500 union all
select N'T(L)-66',N'FTP-',N'AB5',13,N'B',N'OUT',11,3500 union all
select N'T(L)-66',N'FTP-',N'AB5',13,N'A',N'OUT',11,11221 union all
select N'T(L)-66',N'FTP-',N'AB5',13,N'A',N'OUT',11,3400 union all
select N'T(L)-66',N'FTP-',N'AB5',13,N'B',N'OUT',11,612 union all
select N'T(L)-66',N'FTP-',N'AB5',13,N'B',N'OUT',11,3216 union all
select N'T(L)-54',N'S0C0',N'AA5',13,N'B',N'IN',11,1650 union all
select N'T(L)-54',N'S0C0',N'AA5',13,N'B',N'IN',11,1040 union all
select N'T(L)-66',N'S0J0',N'AA5',13,N'B',N'IN',11,3168 union all
select N'T(L)-66',N'S0J0',N'AA5',13,N'A',N'IN',11,3500 union all
select N'T-50',N'S00Z',N'AA5',13,N'A',N'IN',8,3150 union all
select N'T-50',N'S00Z',N'AA5',13,N'A',N'IN',8,3450 union all
select N'T-54',N'S000',N'AA5',13,N'B',N'IN',8,2415 union all
select N'T-54',N'S000',N'AA5',11,N'B',N'IN',8,3400 union all
select N'T-54',N'S000',N'AA5',11,N'B',N'IN',8,2176 union all
select N'F-60/84',N'8ECY',N'AA5',23,N'B',N'IN',10,3350 union all
select N'F-60/84',N'8ECY',N'AA5',23,N'B',N'IN',10,603 union all
select N'F-60/84',N'8ECY',N'AA5',23,N'A',N'IN',10,140 union all
select N'F-60/84',N'8ECY',N'AA5',23,N'A',N'IN',10,12451 union all
select N'F-78/96',N'8N5A',N'AA5',23,N'A',N'IN',10,1680 union all
select N'F-78/96',N'8NCA',N'AA5',23,N'A',N'IN',10,18547 union all
select N'F-78/96',N'8NCA',N'AA5',23,N'A',N'IN',10,540
Go
Select * from #tab
--测试数据结束


--按规格,工作站,数量区间,聚合数量插入#tab2中
;WITH cte AS (
SELECT *,
CASE
WHEN 数量 < 1000 THEN '<1000'
WHEN 数量 BETWEEN 1000 AND 5000 THEN '1000-5000'
WHEN 数量 BETWEEN 5000 AND 10000 THEN '5000-10000'
WHEN 数量 BETWEEN 10000 AND 15000 THEN '10000-15000'
WHEN 数量 BETWEEN 15000 AND 20000 THEN '15000-20000'
WHEN 数量 > 20000 THEN '>20000'
END AS [数量区间]
FROM #tab
)
SELECT 规格,工作站,数量区间,sum(数量)as 数量合计
INTO #tab2
FROM cte
GROUP BY 规格,工作站,数量区间

--按规格,工作站,数量区间,聚合批数插入#tab3中
;WITH cte AS (
SELECT *,
CASE
WHEN 数量 < 1000 THEN '<1000'
WHEN 数量 BETWEEN 1000 AND 5000 THEN '1000-5000'
WHEN 数量 BETWEEN 5000 AND 10000 THEN '5000-10000'
WHEN 数量 BETWEEN 10000 AND 15000 THEN '10000-15000'
WHEN 数量 BETWEEN 15000 AND 20000 THEN '15000-20000'
WHEN 数量 > 20000 THEN '>20000'
END AS [数量区间]
FROM #tab
)
SELECT 规格,工作站,数量区间,count(1) as cnt
INTO #tab3
FROM cte
GROUP BY 规格,工作站,数量区间



--数量行专列插入tab4中
IF OBJECT_ID('tab4') IS NOT NULL
DROP TABLE tab4
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+[工作站]+']' from #tab2 for xml PATH('')),1,1,'')
set @sql ='SELECT * into tab4 from #tab2 pivot(max(数量合计)for [工作站] in('+@name+'))a'
EXEC( @sql)
SELECT * FROM tab4

--批数行转列插入tab5中
IF OBJECT_ID('tab5') IS NOT NULL
DROP TABLE tab5
DECLARE @name2 VARCHAR(max),@sql2 VARCHAR(max)
set @name2 =stuff((SELECT DISTINCT ',['+[工作站]+']' from #tab3 for xml PATH('')),1,1,'')
set @sql2 ='SELECT * into tab5 from #tab3 pivot(max(cnt)for [工作站] in('+@name2+'))a'
EXEC( @sql2)
SELECT * FROM tab5

--两表联合查询出结果
SELECT a.规格,
a.数量区间,
a.AA1 AS AA1数量合计,
b.AA1 AS AA1批数,
a.AA2 AS AA2数量合计,
b.AA2 AS AA2批数,
a.AA5 AS AA5数量合计,
b.AA5 AS AA5批数,
a.AA7 AS AA7数量合计,
b.AA7 AS AA7批数,
a.AA9 AS AA9数量合计,
b.AA9 AS AA9批数,
a.AB5 AS AB5数量合计,
b.AB5 AS AB5批数
FROM tab4 a
right JOIN Tab5 b
ON a.规格 = b.规格
AND a.数量区间=b.数量区间
ORDER BY a.规格

qq_39528261 2018-02-01
  • 打赏
  • 举报
回复
回:听雨停了 不用考虑哦!谢谢您
听雨停了 2018-02-01
  • 打赏
  • 举报
回复
引用 6 楼 qq_39528261 的回复:
二月十六版主,我表述明白了吗?
字段6里的in/out需要考虑进数量的sum中吗?
qq_39528261 2018-02-01
  • 打赏
  • 举报
回复
二月十六版主,我表述明白了吗?
qq_39528261 2018-02-01
  • 打赏
  • 举报
回复

版主请看此图,
1,2代表列标题名称,
我发帖考虑欠周,不好意思!
二月十六 2018-02-01
  • 打赏
  • 举报
回复
引用 3 楼 qq_39528261 的回复:
谢谢二月十六版主,每次得到您的帮助, 规则请参考附图,可能更好理解!
没看明白规则 另外 1 2 规格 6 工作站 8 9 11 12 数量 T(L)-54 S0C0 AA1 13 A IN 11 3600 这个表字段1 2的是什么?
qq_39528261 2018-02-01
  • 打赏
  • 举报
回复
谢谢二月十六版主,每次得到您的帮助, 规则请参考附图,可能更好理解!
qq_39528261 2018-02-01
  • 打赏
  • 举报
回复
依规格工作站计算出区间数量及总批数
二月十六 2018-02-01
  • 打赏
  • 举报
回复
搜索规则是什么?

22,207

社区成员

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

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