当前位置: 首页 > 面试题库 >

从表中选择值作为列标题

茅星华
2023-03-14
问题内容

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

ID FileID属性值

 1 x名称1.pdf

 2 x大小12567

 3 x类型application / pdf

 4 y名称2.pdf

 5是size 23576 6y

 类型application / pdf

......

等等

如何在上面的表上编写SQL查询以获取如下所示的结果

FileID名称大小类型

  x 1.pdf 12567 application / pdf

  y 2.pdf 23576应用程序/ pdf

问题答案:

具有连接的版本,无论缺少多少行,都可以正常运行:

SELECT  
    pd.FileID 
  , p1.Value  AS Name
  , p2.Value  AS Size
  , p3.Value  AS Type
FROM
        ( SELECT DISTINCT FileID
          FROM propertyvalues 
        ) AS pd
    LEFT JOIN
        propertyvalues AS p1
            ON  p1.FileID = pd.FileID 
            AND p1.Property = 'Name'
    LEFT JOIN
        propertyvalues AS p2
            ON  p2.FileID = pd.FileID 
            AND p2.Property = 'Size'
    LEFT JOIN
        propertyvalues AS p3
            ON  p3.FileID = pd.FileID
            AND p3.Property = 'Type' ;

如果您有一个表,其中FileID主键在哪里,则可以DISTINCT用该表替换子查询。

关于效率,它取决于许多因素。例子:

  • 所有FileID的行是否都具有名称,大小和类型,并且没有其他属性(并且表的聚集索引位于(FileID, Property))?然后,该MAX(CASE...)版本将运行良好,因为无论如何都必须扫描整个表。

  • 是否有(超过)3个以上的属性,并且许多FileID没有名称,大小和类型,所以该JOIN版本可以很好地使用索引,(Property, FileID) INCLUDE (Value)因为仅此索引数据将用于联接。

  • 不确定PIVOT版本的效率如何。

不过,我建议您在选择使用哪个版本之前,先在您的环境(版本,磁盘,内存,设置等)中使用数据和表大小测试各种版本。



 类似资料:
  • 问题内容: 我有一个用于“个人档案”的表,以行样式存储个人档案属性值,例如: 和另一个用于属性定义的表: 如何使用或以任何其他方式以这种方式显示它: 问题答案: 不用关键字就可以轻松完成此操作,只需将其分组即可 您也可以使用关键字执行此操作

  • 问题内容: 我有一个带有下表的WordPress数据库 帖子 后元 并有记录与值和 如何编写SQL以显示列名和结果列名? 下面的查询是我的起点 问题答案: 这听起来像你想的和值。不幸的是,MySQL没有函数,但是您可以使用带有以下语句的聚合函数来复制它: 参见带有演示的SQL Fiddle

  • 问题内容: 我有一个带有列名称的数据表: 其中“列”包含数字值,“期间”列是具有1到48的标识列,因此有48行。 我想将此表按摩成一种格式,在该格式中,我具有“名称”列和“值”列以及“期间”列。 我想创建原始表的视图来执行此操作吗?如何选择列名称,并将其以及该列中的正确值放入NameOfVehicle和Value列中? 问题答案: 如果您有固定的列,则始终可以执行以下操作: 如果列是动态的或未知的

  • 问题内容: 我有一个MySQL表,其中包含以下类型的信息: 这是我用来从该表获取数据的脚本示例: 该脚本显示表格中的每个日期,例如 我只想显示唯一的日期,例如 问题答案: 在MySQL中使用DISTINCT运算符:

  • 问题内容: 假设我有一张桌子: 我需要获取仅提及一次的名称(在本例中为:乍得和蒂姆)。查询的是什么?谢谢。 问题答案: 您可以使用: Rextester演示

  • 假设我有以下熊猫数据: 但是如何根据值列表进行子集呢?-类似这样: 得到: