在 SQL Server 中创建相关矩阵

2024-01-11

我试图在 SQL Server 中获取相关矩阵,并且我的数据按以下方式存储在表中:

RptLOB1     RptLOB2   Correlation
AE          AE             1
Bail        AE            0.35
Commercial  Bail          0.25
Commercial  AE            0.15

...等等。

我想编写一段代码,以便我的输出如下所示:

            AE     Bail   Commercial
AE          1      0.35      0.15
Bail        0.35    1        0.25
Commercial  0.15   0.25       1

RptLOB 的顺序并不重要,只要从上到下和从左到右的顺序相同即可。我一直在尝试找到一种方法来解决这个问题,但我不太确定最好的方法是什么。我正在考虑使用 PIVOT,但这不会在顶部输出 RptLOB(它们将被视为表中的列)。

EDIT:

该输出将被插入到另一个表中,如下所示:

col1             col2        col3                            col4        col5              

Generic
Company Inputs   Insurance   Stochastic Model Correlations   Exposure    Correlation Matrix
                 AE          Bail                            Commercial
AE               1           0.35                            0.15
Bail             0.35        1                               0.25
Commercial       0.15        0.25                            1

您可以使用PIVOT为了这。如果您知道必须转换的列数,则可以使用静态版本:

select *
from 
(
  select RptLOB1 RptLOB1, RPTLOB2 RPTLOB2, Correlation
  from yourtable
  union all
  select RPTLOB2, RptLOB1, Correlation
  from yourtable
  union all
  select distinct RptLOB1, RptLOB1, 1.0
  from yourtable
) x
pivot
(
  max(Correlation)
  for RPTLOB2 in ([AE], [Bail], [Commercial])
) p;

see SQL Fiddle 演示 http://sqlfiddle.com/#!3/4f4fa/25

如果您有未知数量的关联值,那么您将需要使用动态版本:

DECLARE @query  AS NVARCHAR(MAX),
    @colsPivot as  NVARCHAR(MAX)

select @colsPivot = STUFF((SELECT distinct  ',' 
                      + quotename(RptLOB1)
                    from yourtable t
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query 
  = 'select RptLOB1, '+@colspivot+ '
     from 
     (
       select RptLOB1 RptLOB1, RPTLOB2 RPTLOB2, Correlation
       from yourtable
       union all
       select RPTLOB2, RptLOB1, Correlation
       from yourtable
       union all
       select distinct RptLOB1, RptLOB1, 1.0
       from yourtable
      ) x
      pivot
      (
        max(Correlation) 
        for RPTLOB2 in ('+ @colspivot +')
      ) p'

exec(@query)

see SQL Fiddle 演示 http://sqlfiddle.com/#!3/4f4fa/31

编辑 - 根据您的评论,如果您希望将列标题放在另一行中,则可以使用以下内容:

DECLARE @query  AS NVARCHAR(MAX),
    @colsPivot as  NVARCHAR(MAX),
    @colsRow as  NVARCHAR(MAX),
    @colsConverted as  NVARCHAR(MAX)

select @colsPivot = STUFF((SELECT distinct  ',' 
                      + quotename(RptLOB1)
                    from yourtable t
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @colsRow = STUFF((SELECT distinct  ', ''' 
                      + RptLOB1 + ''' as ' + RptLOB1
                    from yourtable t
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @colsConverted
      = STUFF((SELECT distinct  ', CAST(' 
                + quotename(RptLOB1) 
                 + ' as varchar(50))'
                from yourtable t
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query 
  = 'select ''RptLOB1'' as RptLOB1, 
      '+ @colsRow + '
     union all 
     select RptLOB1, '+ @colsConverted+ '
     from 
     (
       select RptLOB1 RptLOB1, RPTLOB2 RPTLOB2, Correlation
       from yourtable
       union all
       select RPTLOB2, RptLOB1, Correlation
       from yourtable
       union all
       select distinct RptLOB1, RptLOB1, 1.0
       from yourtable
      ) x
      pivot
      (
        max(Correlation) 
        for RPTLOB2 in ('+ @colspivot +')
      ) p'

exec(@query)

see SQL Fiddle 演示 http://sqlfiddle.com/#!3/4f4fa/42

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL Server 中创建相关矩阵 的相关文章

随机推荐

  • 未找到类 ZMQContext

    我在 Ubuntu 14 04 的虚拟机内的 nginx 1 4 6 和 php 5 5 上运行 Web 服务器 并且需要安装 ZeroMQ 扩展 我已按照以下说明进行操作ZMQ http zeromq org area download
  • RIP寄存器不改变

    为什么当我继续使用c和内联汇编打印堆栈和指令指针寄存器时它们不会改变 因为逻辑上其他程序同时运行 所以它们应该在打印时不断改变 操作系统和 CPU 一起工作 为进程 同时运行 提供 CPU 切片 实际上 他们通过分配时间片来虚拟化 CPU
  • 如何在多行中编写 f 字符串而不引入意外的空格? [复制]

    这个问题在这里已经有答案了 考虑以下代码片段 name1 Nadya name2 Jim def print string string f name1 n name2 print string print string 产生 Nadya
  • Monodevelop - 仅使用 sudo 运行

    我已经在我的 Debian amd64 jessie 构建上安装了 Mono 和 Monodevelop 并且我只能使用提升的权限运行 monodevelop 从 UI startesque 菜单启动 monodevelop 似乎什么也没发
  • 带有位置参数的 Git 别名

    基本上我正在尝试别名 git files 9fa3 执行命令 git diff name status 9fa3 9fa3 但 git 似乎没有将位置参数传递给别名命令 我努力了 alias files git diff name stat
  • 为什么 Apache 没有在 XAMPP 上启动 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 直到昨天 我的本地主机一切都很好 但从昨天开始 本地主机无法打开 它说 无法连接 我尝试了很多次来启动Apache on XAMPP 但它说消息忙 我
  • .NET .config 文件中 ConnectionString 元素的用途

    在中存储和读取应用程序的连接字符串有什么区别
  • 转移 PyPI 包的所有权

    As per PEP 541 https www python org dev peps pep 0541 现在可以认领废弃的 PyPI 项目 有人这样做过吗 联系谁 我尝试过dist utils 邮件列表 https mail pytho
  • Get-EventLog - 某些事件日志源缺少有效消息

    我正在使用 get eventlog 提取和过滤系统事件日志数据 我发现 get event log 无法正确返回与某些条目关联的消息 这些条目通常显示在事件日志查看器中 例如 get eventlog logname system sou
  • Python 模拟多个具有不同结果的调用

    我希望能够对特定属性函数进行多次调用 为每次连续调用返回不同的结果 在下面的示例中 我希望增量在第一次调用时返回 5 然后在第二次调用时返回 10 Ex import mock class A def init self self size
  • OpenCV 和 VS2010:致命错误 LNK1104:致命错误 LNK1104:无法打开文件“tbb_debug.lib”

    我尝试按照本指南使用 Visual Studio C 2010 安装 OpenCV 使用 Windows 7 64 位 在 Visual C 2010 Express 中安装 OpenCV 2 4 3 https stackoverflow
  • Django 独立脚本

    我正在尝试从另一个 python 脚本访问我的 Django v1 10 应用程序数据库 但遇到了一些问题 这是我的文件和文件夹结构 store store init py settings py urls py wsgi py store
  • 面向对象的设计建议

    这是我的代码 class Soldier public Soldier const string name const Gun gun string getName private Gun gun string name class Gun
  • Android:SensorManager.getRotationMatrix 和 SensorManager.getOrientation() 的算法

    要在 Android 中获取欧拉角 例如俯仰角 横滚角 方位角 的方向 需要执行以下操作 SensorManager getRotationMatrix float R float I float 重力 float 地磁 SensorMan
  • 跨站脚本注入

    我正在测试一个网络应用程序 我想写一个XSS将显示警报的脚本 Hello 我写的第一个脚本是
  • VBA Word - 带有初始文件名的另存为对话框

    我有一个 vba 宏 可以对当前文档进行一些更改 并确定应该用于该文档的文件名 如果该文档没有保存为该文件名 但应该提示用户这样做 但应该能够更改默认设置 我发现两种可能性都不完美 我需要这两种的混合 第一种方法 Application D
  • 如何使用Airflow获取并处理mysql记录?

    我需要 1 run a select query on MYSQL DB and fetch the records 2 Records are processed by python script 我不确定我应该采取什么方式 xcom 是
  • 根据使用的发电机设置 QTDIR

    我正在尝试设置一个 CMake 项目 该项目由多个静态库和一个依赖于 QT 的主要可执行文件组成 我希望在运行 cmake 构建时能够选择 MinGW 或 MSVC 构建 我最近了解到 如果满足以下条件 CMake 的 QT 特定部分将自动
  • 如何设置 NSMenuItem 操作的发送者?

    Apple 文档说传递给 NSMenuItem 操作的发送者可以设置为某个自定义对象 但我似乎不知道如何执行此操作 有没有我在文档中没有看到的方法 我不确定您指的是哪一份文档 链接会有所帮助 您可以使用 setRepresentedObje
  • 在 SQL Server 中创建相关矩阵

    我试图在 SQL Server 中获取相关矩阵 并且我的数据按以下方式存储在表中 RptLOB1 RptLOB2 Correlation AE AE 1 Bail AE 0 35 Commercial Bail 0 25 Commercia