22,207
社区成员
发帖
与我相关
我的任务
分享
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.规格
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.规格