SQL Server 中的动态透视多列

2024-06-01

我有一张这样的桌子

Id   Name   FromAddress   ToAddress
1    Joey      ABC          JKL
2    Joey      DEF          MNP
3    Joey      GHI          OQR

我正在 SQL Server 中寻找带有动态数据透视表的以下输出

Name   FromAdrs1   FromAdrs2   FromAdrs3   ToAdrs1   ToAdrs2   ToAdrs3
Joey     ABC         DEF         GHI          JKL      MNP       OQR

注意:行数根据 Id 值而变化,因此我尝试使用动态数据透视获取输出。

这是我尝试过的代码,看起来是正确的,但给我一个错误。

IF OBJECT_ID('temp..#temp') IS NOT NULL
DROP TABLE #temp

CREATE TABLE #temp
(
    Id INT, Name VARCHAR(10), FromAddress VARCHAR(10), ToAddress VARCHAR(10)
)

INSERT INTO #temp VALUES (1, 'Joey', 'ABC', 'JKL'), (2, 'Joey', 'DEF', 'MNP'), (3, 'Joey', 'GHI', 'OQR')

--SELECT * FROM #temp


DECLARE @colsFrom AS NVARCHAR(MAX),
@colsTo AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX);

SET @colsFrom = STUFF((SELECT distinct ',' + QUOTENAME(CONVERT(VARCHAR(2), t.id) + 'From') 
        FROM #temp t
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

SET @colsTo = STUFF((SELECT distinct ',' + QUOTENAME(CONVERT(VARCHAR(2), t.id) + 'To') 
        FROM #temp t
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query = 'SELECT *, ' + @colsFrom + ', ' + @colsTo + ' from 
        (
            select *
            from #temp
       ) T
        PIVOT 
        (
            max(FromAddress)
            for Id in (REPLACE('''+@colsFrom+''',''From'',''''))
        ) p
        PIVOT 
        (
            max(ToAddress)
            for Id in (REPLACE('''+@colsTo+''',''To'',''''))
        ) Q'

execute(@query)

DROP TABLE #temp

任何帮助表示赞赏。感谢大家抽出宝贵的时间。

编辑:这是错误


我相信问题是IN ()表达于PIVOTs。列列表明确必须是字段名称列表,而不是函数,也不是 varchar 文字或函数值的列表。你有一个REPLACE()在那里发挥作用。引擎期望寻找一个名为[REPLACE]然后对出现的左括号感到困惑。

这是有效的(方括号表示强调):

SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      ([Emp1], [Emp2], [Emp3], [Emp4], [Emp5])
)AS unpvt;

这不是:

SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      ('Emp1', 'Emp2', 'Emp3', 'Emp4', 'Emp5')
)AS unpvt;

这是无效的:

SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      (REPLACE('Emp1','1','A'), REPLACE('Emp2','2','B'))
)AS unpvt;

更换execute(@query) with a select @query or print @query查看代码生成的查询并以这种方式对查询分析器中的语法进行故障排除。然后向后工作。

你想做REPLACE()在您构建查询的同一级别。最终的查询@query变量应该已经固定了列名。

或者,您可以生成@colsFromLabels, @colsToLabels, @colsFrom and @colsTo与前两者有'from' and to添加位,后两个只是列名。

就方括号转义而言,您想要的输出也有点粗糙。

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

SQL Server 中的动态透视多列 的相关文章

  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 连接多个表中的多行

    我已经评论过many https stackoverflow com questions 273238 how to use group by to concatenate strings in sql server other https
  • DbContext 和连接池

    在我继承的应用程序中 基本控制器中有这个 应用程序中的所有其他控制器都继承自该控制器 public BaseController db new MyDbContext db Database Log s gt Debug Write s p
  • 一次性将所有 SQL Server 表导出为 txt 或 csv

    我有数百个 SQL Server 表需要导出到 txt 或 csv 文本限定符和 划定的 导入 导出向导一次仅允许一张表 有没有更好的方法 工具 脚本来同时完成这一切 Thanks 您可以使用以下命令对 BCP 执行某些操作 SELECT
  • 主键和代理键有什么区别?

    我用谷歌搜索了很多 但没有找到带有示例的确切直接答案 任何例子都会更有帮助 主键是表中的唯一键 您选择它可以最好地唯一标识表中的记录 所有表都应该有一个主键 因为如果您需要更新或删除一条记录 您需要知道如何唯一标识它 代理键是人工生成的键
  • 如何让SqlDataReader获取time(7)类型变量?

    我有一个像这样的 SQL Server 表 userID int xCoordinate int yCoordinate int recordTime time 7 itemId int 我想获取给定用户的所有录制时间 现在假设为用户 1
  • 使用递归 CTE 生成嵌套第 n 层 JSON SQL Server

    我有以下结构的数据 我想使用父属性 id 关系生成嵌套 JSON 所需的输出 propertyID 1 title foo class typeid 150 value bar children propertyID 2 title foo
  • 测试 ODBC 连接的有效方法

    我们的产品是一个 TCP 监听事务处理器 传入连接被分配一个线程来处理连接和一个数据库连接来使用 我们维护一个数据库连接池 而不是为每个传入的客户端连接建立新的数据库连接的昂贵方法 数据库连接池相当可配置 最小 最大大小 增长率等 一些细节
  • 如何处理 FOR XML PATH/AUTO 中的空白值 - SQL Server?

    有没有人对这种 SQL Server 行为有任何见解或遇到过 当空白值转换为数据类型时 char 或具有 的列char 作为数据类型 处理使用For XML PATH 它返回 XML 结果 20 空格的特殊字符编码 当相同的空白值转换为va
  • 部署 Visual Studio 2010 数据库项目

    我有一个 Visual Studio 2010 数据库项目 我想从中生成一个脚本 这只是将该数据库放到另一台机器上 问题是我找不到 对此的解决方案 当我开始这个项目时 我从开发电脑上的数据库导入了 shema 生成了架构对象 所有表和脚本都
  • SQL Server 上的聚合(分组依据)如何工作?

    SQL Server如何实现group by子句 聚合 以执行计划作为灵感这个问题的 https stackoverflow com questions 1465827 select at onece query select p id D
  • 派生列中的 SSIS 日期为 yyyy-mm-dd 格式

    我需要日期年 月 日ssis 派生列中的格式 我在用 DT DATE DT DBDATE GETDATE 其填充为2013 05 24 00 00 00 请建议 SSIS 派生列表达式变体 DT STR 4 1252 DATEPART yy
  • 将 ASP.NET 网站连接到 SQL 数据库

    我目前正在尝试在 ASP NET 网站项目和 SQL Server 2008 R2 构建的数据库之间建立连接 我需要这样做的方式是使用connectionString来自Web config页面 但我不知道要赋予它什么值或如何使用所述值建立
  • 将 Rails 2.x 与 MS SQL Server 2005 结合使用

    这里有人有使用 Rails 2 x 中的 MS SQL Server 2005 的积极经验吗 我们的开发人员使用 Mac OS X 我们的产品在 Linux 上运行 由于遗留原因 我们应该使用 MS SQL Server 2005 我们正在
  • 如何对数据库架构进行版本控制?

    是否有办法 廉价或 FLOSS 对 SQL Server 2008 DB 架构进行版本控制 这是杰夫 阿特伍德 Jeff Atwood 写的一篇不错的文章数据库版本控制 http www codinghorror com blog 2006
  • 限制最大值和分组依据返回太多行

    我正在使用 SQL Server 数据库 给出以下查询 我试图获得每个班级的最高分 这Scores表有 50 行用于两个类 所以我总共需要 2 行 但是 因为我有Scores Id 它返回每一行Scores since Scores Id是
  • SQL Server 2012 - 使用 openquery 插入链接服务器表

    我有一个链接服务器Remoteserver包含一个表 其中保存目录中的文件和文件夹名称 当我在远程服务器上时 我可以运行内置程序 xp dirtree 并填充 文件 表 但我需要做的是从本地 SQL 服务器运行一个查询来执行以下操作 删除所
  • 无法更改 SSIS Excel 目标列数据类型

    我有一个 SSIS 包 它从 SQL Server 导入数据并将其放入 Excel 目标文件中 当进入 ADO 源组件的高级编辑器时 我有一个字段Description其外部数据类型为Unicode String 长度 4000 输出数据类
  • 从 ASP.NET 插入到 MS Access

    我们正在尝试建立一个专门用于内联网的服务台票务系统 决定使用 Visual Studio 2008 Express 的 ASP NET C 如果需要的话 我们有一个完整版本 没什么花哨的 几页抓取 NTLM 信息 系统信息并将其与问题一起存
  • SQL:使用 1 个查询更新一行并返回列值

    我需要更新表中的一行 并从中获取列值 我可以这样做 UPDATE Items SET Clicks Clicks 1 WHERE Id Id SELECT Name FROM Items WHERE Id Id 这会生成 2 个对该表的计划

随机推荐

  • IIS6 中托管的 WCF 服务在生产中收到 404

    我已经构建了一个简单的 WCF 服务并将其部署到 IIS6 我注意到它可以在我的开发和登台环境中运行 但不能在生产环境中运行 每次我尝试点击服务元数据链接时 都会收到 404 页面 我检查了我能想到的所有 IIS 配置 它们是相同的 所以我
  • 如何将数据从长格式重塑为宽格式

    我在重新排列以下数据框时遇到问题 set seed 45 dat1 lt data frame name rep c firstName secondName each 4 numbers rep 1 4 2 value rnorm 8 d
  • PowerShell Trim 字符串包含“< char >$”的错误?

    如果我使用Trim 包含字符串的方法 char repeated char 例如 BL LA 或 LA AB Trim 删除之后的重复字符 以及 例如 a BL LA b a Trim BL returns A not LA but a B
  • python相对导入[重复]

    这个问题在这里已经有答案了 我正在尝试在 python 中进行相对导入 但我无法理解语法 每次我在这里搜索它时 我都找不到答案 这是我的文件夹结构 Root libraries mylibrary init projects project
  • 在python中将十进制转换为二进制[重复]

    这个问题在这里已经有答案了 python 中是否有任何模块或函数可以用来将十进制数转换为其等价的二进制数 我可以使用 int binary value 2 将二进制转换为十进制 所以有什么办法可以在不自己编写代码的情况下进行相反的操作吗 所
  • 如果我使用带有表单身份验证的 WCF,php 或 java 客户端将如何进行身份验证?

    我有一个通用的概念验证 WCF 服务 它使用表单身份验证来保护访问 当我的客户端是 NET 时 一切都很好 vb 代码如下 Dim client As SupplierServiceClient New SupplierServiceCli
  • 如何使用 HTML CSS JS 创建滑块/切换来更改屏幕上的字体大小 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 is there any way I can make this gt 所以我想制作一个滑块 切换器 用户可以拖动 滑动它来改变不同的
  • Shiny :针对所有错误显示一条消息

    我在 R 的 Shiny 中有一个应用程序 我想处理消息 以便用户看不到发生了什么错误 我知道通过 tags style type text css shiny output error visibility hidden shiny ou
  • Google 地图 api javascript 标签未验证

    正在寻找当前网站 正在使用 W3C 进行完全 HTML5 验证 这是无法验证的 Google 地图 API Javascript 标记 这是W3C的回应 没有开始字符引用 可能应该被转义为 它不喜欢 定义传感器是真还是假时 我尝试过以下方法
  • 在ggplot2中,箱线图线的末尾代表什么?

    我找不到箱线图线条端点代表什么的描述 For example here are point values above and below where the lines end 我意识到盒子的顶部和底部是第 25 个和第 75 个百分位数
  • 默认数组值

    有没有办法在javascript中为数组分配默认值 ex an array with 24 slots that defaults to 0 您可以使用fill数组上的函数 Array 24 fill 0 Note fill仅在 ECMAS
  • Android listview数组适配器选择

    我正在尝试向列表视图添加上下文操作模式 但如果我做了一个选择 我会遇到一些问题List1 setSelection position 它不会选择任何东西 如果我做List1 setItemChecked position true 它可以工
  • Android 应用程序中的呼叫显示添加联系人对话框

    我在 Android 应用程序中使用此代码进行调用 Intent callIntent new Intent Intent ACTION CALL callIntent setData Uri parse tel call Number s
  • 从twitter api实体参数php获取图像url

    我正在尝试通过实体参数使用 php 获取并显示在推文中发布的图像 我的 url 中有 include entities 可以看到返回的 json 中的实体 在我的 foreach 循环中 我正在执行以下操作 foreach results
  • 为什么我在某些文档上从 Watson 文档转换服务收到 415 错误?

    我正在尝试使用 Watson 文档转换服务将一组 HTML 文档转换为答案单元 大约 1 3 的文档处理良好 其余文档出现此错误 The Media Type application octet stream of the input do
  • 使用 R 下载压缩数据文件、提取并导入 .csv

    我正在尝试使用以下方法从网页下载并提取 csv 文件R 这个问题是重复的使用 R 下载压缩数据文件 提取和导入数据 https stackoverflow com questions 3053833 using r to download
  • 优化 tribool 数组的空间

    让我从一些背景开始 通过 tribool 我理解一个可以保存以下值之一的变量 true false or null 有问题复制整数数组与布尔指针数组 https stackoverflow com questions 4350041 cop
  • Rails - 使用 %W

    我有以下效果很好的 def steps w hello billing confirmation end steps first 但我想这样做 def step title w Upload a photo Billing Info Con
  • 直接对文件的哈希值进行数字签名,而不是对文件进行签名

    我的问题是 是否可以直接对文件的哈希值而不是文件进行数字签名 我必须通过电子令牌在 Web 环境中对 xml 文件进行数字签名 所以我必须将文件从服务器下载到客户端 然后从客户端计算机上的电子令牌 USB 获取证书并对文件进行签名并将其上传
  • SQL Server 中的动态透视多列

    我有一张这样的桌子 Id Name FromAddress ToAddress 1 Joey ABC JKL 2 Joey DEF MNP 3 Joey GHI OQR 我正在 SQL Server 中寻找带有动态数据透视表的以下输出 Na