我有一个表“ 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演示
假设我有以下熊猫数据: 但是如何根据值列表进行子集呢?-类似这样: 得到: