You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中将资产属性查询结果格式化为指定列结构?

解决SQL Server中行转列的需求

你现在需要把PCM_MultiItems_Metadata表中同一Title的不同属性值合并到同一行,这是典型的行转列场景。你之前的CASE表达式已经迈出了第一步,但因为没有聚合和分组,会产生多行数据,我们可以通过GROUP BY配合聚合函数来实现目标格式:

SELECT 
    Title,
    MAX(CASE WHEN fieldName = 'Supplier Name' THEN fieldvalue END) AS 'Supplier Name',
    MAX(CASE WHEN fieldname = 'Legal Agreement Name' THEN fieldValue END) AS 'Legal Agreement Name'
FROM PCM_MultiItems_Metadata 
WHERE PROFILEID =254 
    AND fieldname IN ('Supplier Name','Legal Agreement Name') -- 这里可以去掉Creator Contact Name,因为你不需要它的列
GROUP BY Title;

为什么这么做?

  • MAX()聚合函数会忽略NULL值,所以对于每个Title,它会提取出对应属性的非空值
  • GROUP BY Title确保每个Title只返回一行结果,把同一标题的多行属性合并到一行

预期输出示例:

TitleSupplier NameLegal Agreement Name
231457Bay VALLEY IMAGE AND DIGITAL AGREEMENT
232058BUCKHEAD MEAT;NEWPORT MEATSYSCO MEAT BRAND GUIDELINE

如果你的数据中同一Title对应多个相同属性的值(比如同一个Title有多个Supplier Name),MAX()会取最大的那个值;如果需要把多个值拼接起来,可以用STRING_AGG()(SQL Server 2017及以上版本),比如:

SELECT 
    Title,
    STRING_AGG(CASE WHEN fieldName = 'Supplier Name' THEN fieldvalue END, ';') AS 'Supplier Name',
    STRING_AGG(CASE WHEN fieldname = 'Legal Agreement Name' THEN fieldValue END, ';') AS 'Legal Agreement Name'
FROM PCM_MultiItems_Metadata 
WHERE PROFILEID =254 
    AND fieldname IN ('Supplier Name','Legal Agreement Name')
GROUP BY Title;

这样就能把同一Title的多个属性值用分号拼接起来,更贴合你示例中的格式。

内容的提问来源于stack exchange,提问作者Karan Neginhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:30:28