错误:不支持的 PIVOT 列类型:文本

2024-05-16

我正在尝试执行 PIVOT 但出现错误。我正在尝试查看哪些患者接受了多次间隔治疗。该列是文本类型。我尝试在查询中将列类型转换为 VARCHAR(MAX) 但仍然收到错误。

这是我的代码:

SELECT patientname, IntervalName1, IntervalName2, IntervalName3
  FROM (SELECT DISTINCT 
               patientname,
               CAST(IntervalName AS VARCHAR(MAX)),
               'IntervalName' +
                CAST(ROW_NUMBER() OVER 
                    (PARTITION BY patientname
                         ORDER BY patientname) AS VARCHAR(10)) AS ColumnSequence
          FROM vwPatientPEIOutcomes
         WHERE [ vwPatientPEIOutcomes.DueDate = daterange ]
         GROUP BY patientname, IntervalName
         ORDER BY patientname, ColumnSequence) Temp
PIVOT(
      MAX(patientname) FOR 
         ColumnSequence IN ( IntervalName1, IntervalName2, IntervalName3 )
     ) tb2

以下是我针对您的答案进行的第二组编辑。我对此很陌生,所以花了一些时间来弄清楚需要什么:

谢谢你的回答。我使用 group by 是因为 row_number 正在创建重复项,而且我不知道如何才能不发生这种情况。

患者姓名和间隔名称都是数据库中的字符串。间隔名称是一个字段,表示他们是否在给定时间范围内接受了调查问卷。我正在尝试为每个患者创建一行。

这是数据集:

CREATE TABLE vwPatientPEIOutcomes (
  patientname varchar(max) NOT NULL,
  intervalname varchar(max) NOT NULL,
  ) ;
   INSERT INTO vwpatientPEIOutcomes (patientname,intervalname) 
  VALUES
  ('Patient 1','End'),
  ('Patient 2','Start'),
  ('Patient 3','Start'),
  ('Patient 4','End'),
  ('Patient 4','6-Month'),
  ('Patient 4','Start'),
  ('Patient 5','6-Month'),
  ('Patient 6','Start'),
  ('Patient 6','End'),
  ('Patient 7','6-Month');

我正在尝试得到这个结果:

patientname Intervalname1 Intervalname2 Intervalname3
Patient 1 End
Patient 2 Start
Patient 3 Start
Patient 4 End 6-Month Start
Patient 5 6-Month
Patient 6 End Start
Patient 7 6-Month

您可以使用条件聚合通过使用导出每个间隔的序数值后ROW_NUMBER()子查询中的窗口函数,例如

SELECT patientname, 
       MAX(CASE WHEN rn = 1 THEN intervalname END) AS intervalname1,
       MAX(CASE WHEN rn = 2 THEN intervalname END) AS intervalname2,
       MAX(CASE WHEN rn = 3 THEN intervalname END) AS intervalname3
  FROM
  ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY patientname
                                      ORDER BY patientname) AS rn
      FROM vwPatientPEIOutcomes ) AS p
 GROUP BY patientname
 ORDER BY patientname
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:不支持的 PIVOT 列类型:文本 的相关文章

随机推荐

  • 在 Subversion 中,我可以是登录名以外的用户吗?

    我想知道如何获得Subversion更改我的更改显示的名称 我刚刚开始使用Subversion 我目前正在使用它来对 XP 笔记本电脑上的代码进行版本控制 我总是以我妻子的名字登录 我希望 subversion DB 显示我名下的更改 稍后
  • 在 WordPress 中获取作者角色

    我正在开发我的第一个 WP 网站 需要在其帖子旁边显示作者的角色 类似于 吉米 管理员 查看可用的作者元数据 http codex wordpress org Function Reference the author meta http
  • Maven 版本插件跳过更新检查

    当我尝试使用versions use releases我的发布存储库被标记为 已禁用 这意味着快照依赖项不会解析为发布 我不明白为什么存储库被认为是禁用的 以下是构建的简短调试输出 DEBUG f remoteArtifactReposit
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • 如何从webkit浏览器中检测Android版本和品牌?

    如何通过webkit浏览器检测Android版本和品牌 可靠吗 我相信你可以检查用户代理 但是 我认为它不安全 因为有很多方法可以用来欺骗用户代理 在谷歌上搜索这个问题给了我们很多答案 它甚至可以在默认浏览器上运行 您只需输入 about
  • 不要包裹 span 元素

    我有一份清单 span 可以在 a 内左右移动的元素 div 元素 如果某些跨度超出了 div 它们应该被隐藏 这可以很好地使用overflow hidden 但是 如果跨度超出了 div 的容纳范围 跨度就会换行 这对于我的用例来说是不期
  • 合并sql中的列

    我正在使用 SQL Server 2017 有一个存储过程 其中我有一个带有连接的简单选择 例如 SELECT p legacyKey AS JobNumber p Name AS JobName G Label AS DesignStat
  • 仅当某些值相等时,如何才能将一个文本文件中的值替换为另一个文本文件中的其他值?

    我有一个名为finalscores txt我想创建一个 python 脚本 它将打开它并从两个单独的列中读取值 这是我的finalscores txt file Atom nVa predppm avgppm stdev delta QPr
  • 如何使用 Rspec 测试具有嵌套路由的控制器?

    我有 2 个使用轨道脚手架生成器创建的控制器 我希望它们嵌套在一个名为 demo 的文件夹中 所以运行 rails g scaffold demo flows rails g scaffold demo nodes 然后我决定将节点嵌套在流
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • java setFullScreenWindow 在 Mac 中隐藏登录对话框

    我使用的是全屏窗口 类似于屏幕保护程序 使用这里的方法 GraphicsEnvironment getLocalGraphicsEnvironment getDefaultScreenDevice setFullScreenWindow t
  • Java:SortedMap、TreeMap、可比较?如何使用?

    我有一个对象列表 需要根据其中一个字段的属性进行排序 我听说 SortedMap 和 Comparator 是实现此目的的最佳方法 我是否要与正在排序的类实现 Comparable 还是创建一个新类 如何实例化 SortedMap 并传入
  • 在 Julia 中解压缩元组数组

    假设我有一个元组数组 arr 1 2 3 4 5 6 使用 python 我可以做zip arr 1 3 5 2 4 6 朱莉娅中与此等效的是什么 作为 splatting 的替代方案 因为这非常慢 您可以执行以下操作 unzip a ma
  • UILabel UILongPressGestureRecognizer 不起作用?

    我怎样才能得到UILongPressGestureRecognizer在 uilabel 当我实现以下代码时 它不会调用该函数 那么请告诉我我做错了什么 UILongPressGestureRecognizer longPress UILo
  • 在 Heroku 上托管的 Rails3 中强制使用“www”,无需 .htaccess

    我想知道是否有 Rack 替代方案来强制 URL 中包含 www 因为 Heroku 不使用 htaccess 文件 也许甚至是在路线中做到这一点的好方法 Thanks 在您的 ApplicationController 中 您可以简单地创
  • 错误:不支持的 PIVOT 列类型:文本

    我正在尝试执行 PIVOT 但出现错误 我正在尝试查看哪些患者接受了多次间隔治疗 该列是文本类型 我尝试在查询中将列类型转换为 VARCHAR MAX 但仍然收到错误 这是我的代码 SELECT patientname IntervalNa