SQL Server为报告取消

时间:2017-08-17 19:21:39

标签: sql-server unpivot

我试图为报告重新安排一些数据 -

我有一张包含地点列表的表格:

| LocationID | LocationName |

和另一个:

 | LocationID | OrderNum | Count |

我试图制作一个返回的选择语句:

 | OrderNum | LocationName1 | LocationName2 | LocationName3 |...

   orderNum1  |count1           |count1           |count1           |...
   orderNum2  |count2           |count2           |count2           |...

基本上按订单编号或订单编号,每个位置...任何帮助表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:0)

你可以尝试一下:

create table ##Locations  (LocationID int , LocationName varchar(15))
create table ##OrderNums  (LocationID int , OrderNum  varchar(15), _count  int )


insert ##Locations values (1,'LocationName1'),(2,'LocationName2'),(3,'LocationName3'),(4,'LocationName4')
insert ##OrderNums values (1,'orderNum1',2),(2,'orderNum1',3),(4,'orderNum1',5),
(3,'orderNum2',2),(4,'orderNum2',3),(4,'orderNum3',5),(4,'orderNum2',5)


declare @sql nvarchar(max) =''
declare @columns nvarchar(max) =''
Select @columns = @columns + N'[' + LocationName + N'],' from ##Locations

SET  @sql = N'select OrderNum,' +  Left(@columns, Len(@columns) - 1) + N' from (
select o.OrderNum, l.LocationName,   _count  from ##OrderNums o inner join ##Locations l on o.LocationID = l.LocationID
 ) as St pivot ( sum(_count) for LocationName in ( ' +  Left(@columns, Len(@columns) - 1) + N') ) pvt'


exec sp_executesql @sql

OrderNum        LocationName1 LocationName2 LocationName3 LocationName4
--------------- ------------- ------------- ------------- -------------
orderNum1       2             3             NULL          5
orderNum2       NULL          NULL          2             8
orderNum3       NULL          NULL          NULL          5