当前位置: 首页 > 面试题库 >

SQL Server Pivot在多个字段上

孟征
2023-03-14
问题内容

我已经在该网站上搜索了所有可能的解决方案,但仍然找不到我的Pivot问题的答案。

我有一张包含以下数据的表。

Portfolio  |  Date      |  TotalLoans  | ActiveLoans  | TotalBalance
--------------------------------------------------------------------
P1         | 2015-12-31 |       1,000  |         900  |   100,000.00
P1         | 2015-11-30 |       1,100  |         800  |   100,100.00
P1         | 2015-10-31 |       1,200  |         700  |   100,200.00

我正在尝试使用以下输出创建枢轴(仅在Portfolio = P1的情况下)

Field        | 2015-12-31 | 2015-11-30 | 2015-10-31 |
-----------------------------------------------------
TotalLoans   |      1,000 |      1,100 |      1,200 |
ActiveLoans  |        900 |        800 |        700 |
TotalBalance |    100,000 |    100,100 |    100,200 |

理想情况下,我正在寻找动态枢纽,但是静态查询也可以,并且我可以尝试动态查询。


问题答案:

您需要先到 UNPIVOT
您的桌子。您可以使用以下查询进行操作:

SELECT Portfolio, [Date], Val, ColType
FROM (SELECT Portfolio, 
             [Date], 
             TotalLoans, 
             ActiveLoans, 
             TotalBalance 
      FROM mytable
      WHERE Portfolio = 'P1') AS srcUnpivot
      UNPIVOT (
         Val FOR ColType IN (TotalLoans, ActiveLoans, TotalBalance)) AS unpvt

输出:

Portfolio   Date      Val      ColType
===============================================
P1         2015-12-31 1000     TotalLoans
P1         2015-12-31 900      ActiveLoans
P1         2015-12-31 100000   TotalBalance
P1         2015-11-30 1100     TotalLoans
P1         2015-11-30 800      ActiveLoans
P1         2015-11-30 100100   TotalBalance
P1         2015-10-31 1200     TotalLoans
P1         2015-10-31 700      ActiveLoans
P1         2015-10-31 100200   TotalBalance

注意: 所有 不可透视的字段都必须是 同一类型 。上面的查询假定所有字段的类型均为 int 。如果不是这种情况,则必须使用CAST

使用以上查询,您可以应用PIVOT

SELECT Portfolio, ColType, [2015-12-31], [2015-11-30], [2015-10-31]
FROM (
   ... above query here ...
PIVOT (
   MAX(Val) FOR [Date] IN ([2015-12-31], [2015-11-30], [2015-10-31])) AS pvt


 类似资料:
  • 编辑:这是对任何感兴趣的人的解决方案。我将Events模型中的Unicode方法更改为以下内容 (django V1.3,python 2.7) 标题令人困惑,我会尽我所能把它弄清楚。我有三个模型,分支、事件和更新: 当通过管理界面添加更新时,我希望相关的_事件字段显示事件模型的标题、分支和更新字段,以便于用户选择正确的相关_事件(而不仅仅是一长串标题)。 添加更新时,我希望如何在下拉或水平相关的

  • 假设我已将以下对象序列化为json字符串: 现在我想反序列化它,但是我想把名称分成两个字段,和。我该怎么做呢? 我希望最终的结果是类似于: 这对Gson有可能吗?

  • 我把这三门课分别放在不同的文件中 我有下面的映射器 这目前仅映射lastName并起作用,我想将Book中的作者字符串映射为 我怎么能这么做?我在MapStruct文档中找不到任何东西。

  • 问题内容: 我正在使用’Lucene.Net’库,并且有以下问题。 不是创建两个单独的QueryParser对象并使用它们来获得两个Hits对象,而是可以使用一个QueryParser对象在两个字段上进行搜索,这样我只有一个Hits对象,它可以为我提供每个文档的总体得分? 问题答案: 有3种方法可以做到这一点。 第一种方法是手动构造查询,这是QueryParser内部的工作。这是执行此操作最强大的

  • 问题内容: 我正在使用最新版本的elasticsearch-php以及最新版本的MongoDB和ElasticSearch。 我需要对可以包含一个或多个值的多个字段进行搜索。例: country_code应为NL,BE或DE,并且类别应包含AA01,BB01,CC02或ZZ11 我以为我会按照以下方式解决它(PHP): 但是结果甚至还不能接近我期望返回的数据。 有时 $ countries 和/或

  • 问题内容: 我想对elasticsearch 进行过滤,但我不知道… 这是我发送给ES _search方法的内容。 但是我总是会收到这个错误: 而且,如果我删除该选项并仅对geo_distance进行过滤,则可以使用…任何帮助都将是极好的。 干杯 问题答案: 我认为您的过滤器写有误。该错误表明过滤器或多或少地在参数方面遇到问题。参见http://www.elasticsearch.org/guid