从表中选择值作为列标题

2024-01-15

我有一个表“propertyvalues”,如下所示:



ID  FileID  Property  Value
1 x Name 1.pdf
2 x Size 12567
3 x Type application/pdf
4 y Name 2.pdf
5 y Size 23576
6 y Type application/pdf
......
and so on

如何在上表中编写 SQL 查询来获取如下结果


 
FileID  Name     Size      Type
x 1.pdf 12567 application/pdf
y 2.pdf 23576 application/pdf

您没有指定 RDBMS,如果您知道要转换的列数,则可以对值进行硬编码:

select FileId,
  max(case when property = 'Name' then value end) Name,
  max(case when property = 'Size' then value end) Size,
  max(case when property = 'Type' then value end) Type
from yourtable
group by FileId

这基本上是一个PIVOT函数,一些 RDBMS 会有一个PIVOT,如果您这样做,那么您可以使用以下内容,PIVOT在 SQL Server、Oracle 中可用:

select *
from 
(
  select FileId, Property, Value
  from yourTable
) x
pivot
(
  max(value)
  for property in ([Name], [Size], [Type])
) p

如果要转换的列数未知,则可以使用动态PIVOT。这获取要在运行时转换的列的列表:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(property) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select FileId, Property, Value
                from yourtable
            ) x
            pivot 
            (
                max(value)
                for Property in (' + @cols + ')
            ) p '

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

从表中选择值作为列标题 的相关文章

  • Redis 与 SQL Server 性能对比

    应用程序性能是使用缓存而不是关系数据库的主要原因之一 因为它以键值对的形式将数据存储在内存中 所以我们可以将经常访问的不经常更改的数据存储在缓存中 从缓存中读取比从数据库中读取要快得多 Redis 是分布式缓存市场上最好的解决方案之一 我正
  • 即使在不活动状态下,Hangfire 也会继续运行 SQL 查询

    我正在开发一个 ASP net MVC 5 网站 并使用 Hangfire 来安排一些任务 在本例中每 3 分钟一次 我知道一个事实是 运行这样的任务 以及与之相关的数据库查询 只需要几秒钟 我面临的问题是 Hangfire 似乎让我的 S
  • ROUTINE_NAME 和 SPECIFIC_NAME 之间有什么区别?

    在 INFORMATION SCHEMA ROUTINES 视图中 存在 ROUTINE NAME 和 SPECIFIC NAME 按照MSDN http msdn microsoft com en us library ms188757
  • SQL Server到Mysql迁移(使用Mysql Workbench)数据传输错误

    我正在使用 Mysql Work bench 6 3 将数据库从 MS Sql server 2008 迁移到 Mysql 在 批量数据传输 期间出错并出现以下警告 这种情况仅发生在像 varchar char 这样的列类型上 当我尝试使用
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试
  • 如何使用 pgAdmin 恢复 postgreSQL 转储文件?

    我有一个 dmp 文件 想要从中恢复数据库 使用 pgAdmin 我该怎么做 在 PgAdmin3 内 在您正在使用的服务器中创建一个新数据库 右键单击该数据库并选择 恢复 使用 浏览器 按钮选择 dmp 文件 选择 恢复 开始恢复数据库
  • 从 Visual Studio 调试 SQL Server 2005 中的存储过程?

    我在这里和其他地方看到很多令人沮丧的问题 但没有明确的答案 我试图让存储过程进行调试 但没有成功 客户端 VS2005或VS2008 两者都不起作用 当我从存储过程上下文菜单中选择 步入存储过程 时 我在调试窗口中看到 已被用户取消 这就是
  • 我应该如何优化 .net 代码中对一个简单存储过程的多次调用?

    我有一个非常简单的存储过程 create procedure spFoo v varchar 50 as insert into tbFoo select v 我有 50 个值要插入到 tbFoo 中 这意味着在我的 c 代码中我调用 sp
  • LINQ-to-SQL 是否支持组合查询?

    作为一名不懂 C 的程序员 我对 LINQ 查询的求值语义很好奇 如下所示 var people from p in Person where p age lt 18 select p var otherPeople from p in p
  • mysql变量赋值:如何强制赋值顺序?

    由于mysql是一种声明性语言 我找不到强制赋值变量顺序的方法 采取这个查询 SET v1 0 SET v2 0 SELECT v1 v2 FROM MyTable table WHERE v1 v2 is not null AND v2
  • 使用存储过程访问数据可以提供哪些安全优势?

    我看到一些指南建议您通过存储过程对所有数据访问进行分层来保护数据库 我知道对于 SQL Server 您可以保护表甚至列免受 CRUD 操作的影响 例如 Logged in as sa USE AdventureWorks GRANT SE
  • SQL Server 中不需要的日期时间舍入

    我遇到了一些看起来很奇怪的事情 SQL Server 似乎正在舍入一些DateTime当我将它们保存到时 值不合适datetime列 我怀疑我错过了一些东西 但我找不到它 我正在使用 NET 4 0 针对 SQL Server 2008 运
  • 没有 DateAdd() 的 SSIS 表达式前一个日期

    目前正在开发一个包 它将表达式从先前的日期传递到文件名 我当前的代码如下作为字符串变量 DT WSTR 20 DATEPART YYYY Dateadd DD 1 dateadd MM datediff MM DT DATE 1900 01
  • 使用聚合函数时减少 Athena 扫描的数据量

    以下查询扫描 100 MB 的数据 select from table where column1 val and partition id 20190309 然而 下面的查询扫描了 15 GB 的数据 有超过 90 个分区 select
  • 使用 sql 查询选择最近 30 天

    我正在查找过去 30 天内周一 周二 周三 周四 周五 周六 周日的数量 我可以在没有实际数据库表的情况下选择最近 30 天的日期和星期几吗 就像是 SELECT everything between convert date GETDAT
  • SQL COUNT(*) 返回错误答案

    以下脚本应返回部门名称以及这些部门中的员工人数 营销 行政和销售部门有 0 名员工 但返回值不是 0 而是 1 我怎样才能纠正它 select Department Departments DepartmentID count as Num
  • 在带有循环引用的表中插入 SQL

    我有 2 张桌子 Empleados numEmpl nombre apellido sexo telefono salario numDept Departamentos numDept nombreDept numDirect 在部门中
  • 简单的t-sql而不是触发器

    任何人都可以帮助解决简单的 t sql 脚本与板载触发器的问题吗 我使用非常简单的触发器将数据从一个表复制到另一个表 这些表之间没有关系 当我尝试在触发器创建后 从同一脚本 直接第一次插入数据时 我得到了所需的结果 但所有接下来的尝试都会失
  • 根据 SQL 查询的集合生成成员的“散点图”结果

    我有一个staff包含工作人员的数据库表 其中user no and user name列 我还有一个 department 包含员工可以加入的部门的表 其中dept no and dept name作为列 因为员工可以是多个部门的成员 所
  • 我的数据库有错误

    创建表时如下 create table Ticket ticket id integer not null primary key AirlineName varchar not null CustomerName varchar from

随机推荐

  • 如何在Java中扩展final类

    这是我现在面临的实际问题 我有课 比方说Foo这个类定义了一个名为的方法getBar返回一个Bar实例 班上Bar被定义在里面Foo并且 并 被声明public static final 我想做的是定义一个类MyFoo延伸Foo但我也想延长
  • SQL简单减法查询

    我有一个数据库 它包含 2 个表 让我将它们称为表 A 和表 B 表A内容 Date 供应商名称 交付货物名称 交付的货物数量 简单地说是成分 A 数值 表B内容 生产日期 产品名称 成分 A 我真正想要的是 使用表 A 第 4 列减去 减
  • “Options”属性的默认值无法绑定到特定线程

    我发现当我改变班级时 public class MarkdownEditorOptions ObservableObject to public class MarkdownEditorOptions INotifyPropertyChan
  • 插入图像/PNG ggplot2 - Cowplot

    我正在尝试使用cowplot包draw image 功能 我已经设法在图表中获取图像作为示例 我无法弄清楚 xy 位置是如何工作的 我必须不断输入随机数 直到看到图像 require ggplot2 required packages re
  • 更改 Visual Studio 2008 项目中文件夹中整个文件的属性

    我通过从资源管理器中拖放来向我的 Visual Studio 2008 项目添加一个文件夹 我想将该文件夹中整个文件的 复制到输出目录 属性更改为 始终复制 问题是该文件夹包含许多子文件夹 子文件夹也是如此 因此 无法一步阻止所有文件并更改
  • MongoDB 查找精确数组匹配但顺序并不重要

    我正在查询查找精确的数组匹配并成功检索它 但是当我尝试查找具有不同顺序的值的精确数组时 它会失败 Example db coll insert user harsh hobbies 1 2 3 db coll insert user kau
  • 使用 Selenium WebDriver 将鼠标悬停并单击隐藏元素

    当我开始使用 Selenium 时 我发现很难对隐藏元素执行操作 悬停 单击等 这些元素只有在悬停在其他元素上时才可见 所以我希望这对其他人有帮助 您可以使用以下任何一种方法 例如 要upvote此页面中的评论 我需要将鼠标悬停在上下文 即
  • Google API - 如何将 URL 重定向到我的本地主机

    我正在努力使用 Google OAuth 将 google 登录集成到我的 Phonegap 应用程序中 发生的情况是 在为我的应用程序创建客户端 ID 时 我必须选择 已安装的应用程序 然后将应用程序类型选择为 其他 因为我是使用 Pho
  • 可用的游戏网络协议定义语言和代码生成

    我一直在寻找一个好的通用二进制网络协议定义框架 以提供一种用多种语言 例如 Java 后端服务器和 iPhone 前端 编写实时游戏服务器和客户端 例如 魔兽世界 或 雷神之锤 III 的方法用 Objective C 和 Cocoa 编写
  • 从本地文件访问 localStorage

    我正在创建 2HTML文件将存储在本地 iPhone 上并通过WebView 我想知道是否可以设置localStorage在一个文件中 并从另一个文件中获取存储结果 我知道localStorage可以从同一域上的文件访问 但是 您似乎无法从
  • Docker /var/lib/docker/overlay2//merged:没有这样的文件或目录

    我收到以下错误并且找不到任何解决方案 9 builder 3 5 COPY app 9 sha256 deb3e9c3d0d018c2253369e84f48bc653a4796eebadd10de1a2bb60b4954e239 9 ER
  • minwindef.h 中的 IN 和 OUT 宏

    这些在 minwindef h 中定义 通常位于 Program Files x86 Windows Kits 8 1 Include shared minwindef h ifndef IN define IN endif ifndef
  • 为什么 C++ 将 unsigned char 值打印为负数?

    我试图理解 C 中的隐式转换规则 并且我理解当两个主要类型之间存在一个操作时 较低类型 将提升为 较高类型 因此可以这样说 int a 5 float b 0 5 std cout lt lt a b lt lt n 应该打印 5 5 因为
  • 静态上下文无法访问收集器中的非静态上下文

    我有一群学生 首先 我想按标记对它们进行分组 然后我想进一步将这些集合分组为同名学生 Map
  • 并发代码分析器

    我想知道是否有任何框架或应用程序 app 程序可以分析任何java代码的并发性 如果该工具知道 jre 提供的类和方法的所有实现 那么它就可以归结为对同步块和方法及其调用层次结构的简单分析 从这里它可以创建一个 Petri 网并确定地告诉您
  • 作为线程调用耗时的 JNI 任务

    我在从线程使用 JNI 调用本机函数时遇到了一个棘手的问题 本机函数是执行计算密集型任务的遗留代码 由于我不想冻结程序的其余部分 因此计算应该在后台线程中执行 EventBus https eventbus dev java net 用于将
  • 将 Android Studio 更新到版本 1.3.0 后,我收到“当前插件中不推荐使用 NDK 集成”错误

    我已将 Android Studio 更新到版本1 3 03天前 在此之前我可以使用 NDK 但现在我收到如下错误 错误 50 0 错误 当前插件中不推荐使用 NDK 集成 考虑尝试新的实验性插件 详细信息请参见http tools and
  • 使用动态文件名读取存储在资源文件(resx)中的字符串

    在我的 C 应用程序中 我需要创建一个为每个客户定制的字符串的 resx 文件 我想要做的是避免每次必须向客户提供应用程序时重新编译整个项目 因此我需要动态访问该字符串 那么 如果我仅在执行时知道文件名 如何 在应用程序执行期间 访问 re
  • 如何停止 PHP 循环

    我试图弄清楚是否可以停止 PHP 中的 foreach 循环 如下所示 arr array Joe Jude James Pitch Tim i 0 foreach arr as val echo val if i 2 Stop loopi
  • 从表中选择值作为列标题

    我有一个表 propertyvalues 如下所示 ID FileID Property Value 1 x Name 1 pdf 2 x Size 12567 3 x Type application pdf 4 y Name 2 pdf