回答

收藏

列标题从表中选择值

技术问答 技术问答 182 人阅读 | 0 人回复 | 2023-09-14

我有一个表 propertyvalues如下所示:* ^( ]  I, s4 g7 N5 F1 k
ID FileID属性值 1 x名称1.pdf 2 x大小12567 3 x类型application / pdf 4 y名称2.pdf 5是size 23576 6y 类型application / pdf......等等如何在上表上写字?SQL查询以获得以下结果
  K( M% l6 P4 f0 g5 eFileID  名称大小类型x 1.pdf 12567 application / pdf  y 2.pdf pdf                : L0 h' `2 H2 }
    解决方案:                                                                $ Z% J  Z# ]/ b
                                                                无论缺少多少行,连接版都能正常运行:
. A: z$ c2 v4 |) tSELECT      pd.FileID   ,p1.Value  AS Name  ,p2.Value  AS Size  ,p3.Value  AS TypeFROM  SELECT DISTINCT FileID          FROM propertyvalues        AS pd    LEFT JOIN        propertyvalues AS p                                                                                                                                                                                                                                                                                                                                  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 3                                                                                                                                                                                                                                                                       ON  p3.FileID = pd.FileID            AND p3.Property = 'Type' ;假如你有一个表,其中FileID主键在哪里,就可以了DISTINCT用表替换子查询。% `( U) n' f6 U$ S2 {' M, ^: k
效率取决于许多因素。! r2 |2 E. f  k( H/ I
所有FileID是否所有的线都有名称、大小和类型,并且没有其他属性(表的聚集索引位于(FileID,Property))?然后,该MAX(CASE...)版本将运行良好,因为无论如何都必须扫描整个表。/ u- c! w- ?5 }/ t; H
是否有三个以上的属性(超过)和许多属性FileID没有名字,大小和类型,所以应该JOIN这个版本可以很好地使用索引,(Property,FileID) INCLUDE (Value)仅此索引数据将用于连接。1 @0 q) @, D8 C" ]6 r
不确定PIVOT版本效率如何?
, t7 q! \, A8 }8 e
但是,在选择使用哪个版本之前,我建议您在您的环境(版本、磁盘、内存、设置等)中使用数据和表尺寸来测试各种版本。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则