【发布时间】:2021-06-19 07:52:58
【问题描述】:
我想对表 MyTable 进行查询,该表使用其值来生成列。
在DATA_TYPE 列中,保证只有1、2 和3 作为可能的值。
MyTable:
CATEGORY DATA_TYPE DATA_CONTENT OTHER_CONTENT
---------- --------- ------------ -------------
CATEGORY A 1 CONTENT 1 OTHER 1
CATEGORY A 2 CONTENT 2 OTHER 2
CATEGORY A 3 CONTENT 3 OTHER 3
CATEGORY B 1 CONTENT 1 OTHER 1
CATEGORY B 2 CONTENT 2 OTHER 2
CATEGORY B 3 CONTENT 3 OTHER 3
CATEGORY C 1 CONTENT 1 OTHER 1
CATEGORY C 2 CONTENT 2 OTHER 2
CATEGORY C 3 CONTENT 3 OTHER 3
这是想要的结果:
CATEGORY DATA_TYPE_1 DATA_TYPE_2 DATA_TYPE_3 OTHER_1 OTHER_2 OTHER_3
---------- ----------- ----------- ----------- ------- ------- -------
CATEGORY A CONTENT 1 CONTENT 2 CONTENT 3 OTHER 1 OTHER 2 OTHER 3
CATEGORY B CONTENT 1 CONTENT 2 CONTENT 3 OTHER 1 OTHER 2 OTHER 3
CATEGORY C CONTENT 1 CONTENT 2 CONTENT 3 OTHER 1 OTHER 2 OTHER 3
【问题讨论】:
-
您所追求的称为
PIVOT(或UNPIVOT),但我不建议在 SQL 中这样做,因为数据的 显示 是关注您的表示层(例如 PHP),而不是 SQL(SQL 只关注获取 行 数据,它不适合列操作) -
您使用的是什么 DBMS(Sql Server、Oracle 等)?这将是某种类型的 PIVOT() 操作,但这些函数的语法和支持会因 DBMS 而异。
-
@dai 虽然当列数可变时为 true,但这是固定的列数。
标签: sql sql-server sql-server-2014