34,588
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('tempdb..#in') IS NOT NULL DROP TABLE #in
IF OBJECT_ID('tempdb..#out') IS NOT NULL DROP TABLE #out
IF OBJECT_ID('tempdb..#city') IS NOT NULL DROP TABLE #city
IF OBJECT_ID('tempdb..#territory') IS NOT NULL DROP TABLE #territory
IF OBJECT_ID('tempdb..#CityTerritory') IS NOT NULL DROP TABLE #CityTerritory
CREATE TABLE #in(ProcessedDate DATETIME,GoodsID VARCHAR(100),FromCity VARCHAR(100),Weight DECIMAL(19,4),Qty INT )
CREATE TABLE #out(ProcessedDate DATETIME,GoodsID VARCHAR(100),DestCity VARCHAR(100),Weight DECIMAL(19,4),Qty INT )
CREATE TABLE #City(CityCode VARCHAR(100),CityName NVARCHAR(100),Province NVARCHAR(100),Region NVARCHAR(100),Country NVARCHAR(100))
CREATE TABLE #CityTerritory(City VARCHAR(100),Territory NVARCHAR(100))
INSERT INTO #City (CityCode,CityName,Province,Region,Country)
SELECT 'HongKong',N'香港',N'香港',NULL,N'中国' UNION
SELECT 'Ningbo',N'宁波',N'浙江',NULL,N'中国'
INSERT INTO #CityTerritory(City,Territory)
SELECT 'HongKong',N'港澳台地区' UNION
SELECT 'Ningbo',N'浙江省地区' UNION
SELECT 'Ningbo',N'华东地区' UNION
SELECT 'Ningbo',N'大陆地区'
INSERT INTO #in(ProcessedDate,GoodsID,FromCity,Weight,Qty)
SELECT DATEADD(d,-30,GETDATE()),'001','Ningbo',100,160
INSERT INTO #out(ProcessedDate,GoodsID,DestCity,Weight,Qty)
SELECT GETDATE(),'001','HongKong',100,160
IF OBJECT_ID('tempdb..#summary') IS NOT NULL DROP TABLE #summary
SELECT YEAR(t.ProcessedDate) AS yr,MONTH(t.ProcessedDate) AS mn,ct.Territory,SUM(weight) AS weight
INTO #summary
FROM (
SELECT i.ProcessedDate,i.GoodsID,i.FromCity AS City,i.Weight,i.Qty FROM #in AS i
UNION ALL --吞吐应该是入和出合计吧
SELECT o.ProcessedDate,o.GoodsID,o.DestCity,o.Weight,o.Qty FROM #out AS o
) AS t
INNER JOIN #CityTerritory AS ct ON ct.City=t.City
GROUP BY ct.Territory,YEAR(t.ProcessedDate),MONTH(t.ProcessedDate)
SELECT * FROM #summary
----转置
DECLARE @cols NVARCHAR(max),@sql NVARCHAR(max)
SELECT @cols=ISNULL(@cols+N',','')+QUOTENAME(Territory) FROM #summary
PRINT @cols
SELECT * FROM #summary AS s
PIVOT(sum(weight) FOR Territory IN ([华东地区],[大陆地区],[浙江省地区],[港澳台地区])) p
+------+----+-----------+--------+
| yr | mn | Territory | weight |
+------+----+-----------+--------+
| 2017 | 10 | 华东地区 | 100 |
| 2017 | 10 | 大陆地区 | 100 |
| 2017 | 10 | 浙江省地区 | 100 |
| 2017 | 11 | 港澳台地区 | 100 |
+------+----+-----------+--------+
+------+----+------+------+-------+-------+
| yr | mn | 华东地区 | 大陆地区 | 浙江省地区 | 港澳台地区 |
+------+----+------+------+-------+-------+
| 2017 | 10 | 100 | 100 | 100 | NULL |
| 2017 | 11 | NULL | NULL | NULL | 100 |
+------+----+------+------+-------+-------+