2017-02-11 65 views
1

我有这个疑问如何在透视中使用多列?

SELECT [b].[BillID], 
     [b].[BillingCode], 
     [bc].[CurrentUsage], 
     [bc].[Rate], 
     [bc].[CurrentCost], 
     [c].[Title] 
INTO #Temp 
FROM [dbo].[Bills] AS [b] 
INNER JOIN [dbo].[BillCosts] AS [bc] ON [bc].[BillIDRef] = [b].[BillID] 
INNER JOIN [Base].[Costs] AS [c] ON [c].[CostID] = [bc].[CostIDRef] 

这是结果

BillID  BillingCode   CurrentUsage Rate  CurrentCost Title 
----------- -------------------- ------------ ----------- ----------- ------ 
5   44545455    10   20   30   AvgTimes 
5   44545455    40   50   60   MaxTimes 

我需要这样的结果:

BillID  BillingCode   AvgTimes Cost MaxTimes Cost AvgTimes Rate MaxTimes Rate AvgTimes Usage MaxTimes Usage 
----------- -------------------- -------------- -------------- -------------- ------------- -------------- --------------- 
5   44545455    30    60    20    50   10    40 

使用上多列CurrentUsage,Cost,Rate支点是否有可能? 如果使用pivot不可能,如何编写查询?

回答

3

您可以使用条件聚集

SELECT [b].[BillID], 
     [b].[BillingCode], 
     MAX(CASE WHEN [c].[Title] = 'AvgTimes' THEN [bc].[CurrentUsage] END) AS [AvgTimes Usage], 
     MAX(CASE WHEN [c].[Title] = 'MaxTimes' THEN [bc].[CurrentUsage] END) AS [MaxTimes Rate], 
     MAX(CASE WHEN [bc].[Title] = 'AvgTimes' THEN [bc].[Rate] END) AS [AvgTimes Rate], 
     MAX(CASE WHEN [bc].[Title] = 'MaxTimes' THEN [bc].[Rate] END) AS [MaxTimes Usage], 
     MAX(CASE WHEN [bc].[Title] = 'AvgTimes' THEN [bc].[CurrentCost] END) AS [AvgTimes CurrentCost], 
     MAX(CASE WHEN [bc].[Title] = 'MaxTimes' THEN [bc].[CurrentCost] END) AS [MaxTimes CurrentCost] 
INTO #Temp 
FROM [dbo].[Bills] AS [b] 
INNER JOIN [dbo].[BillCosts] AS [bc] ON [bc].[BillIDRef] = [b].[BillID] 
INNER JOIN [Base].[Costs] AS [c] ON [c].[CostID] = [bc].[CostIDRef] 
GROUP BY [b].[BillID], [b].[BillingCode]