【问题标题】:How to use multiple columns in pivot?如何在数据透视表中使用多个列?
【发布时间】:2017-06-29 15:18:02
【问题描述】:

我有这个问题

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? 如果无法使用数据透视,如何编写查询?

【问题讨论】:

    标签: sql-server sql-server-2014


    【解决方案1】:

    你可以使用条件聚合

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      相关资源
      最近更新 更多