【发布时间】:2019-11-18 10:46:20
【问题描述】:
我已经做了一些研究,到目前为止,这对我来说很有意义:
Convert row value in to column in SQL server (PIVOT)
但是,我想知道是否有任何方法可以做到这一点,而不必一一声明所需的列,因为我有 200 多个列要检索。
下面是我作为桌子的一瞥:
ID | Col_Name | Col_Value
------------------------------
1 | Item_Num | 12345
2 | Item_Date | 34567
3 | Item_Name | 97454
4 | Item_App1 | 234567
5 | Item_App2 | 345678
请注意,我有 200 多个不同的 Col_Name 值,我希望它是列字段。
我现在正在使用这个,但只用于 5 列:
SELECT * FROM
(
SELECT [ID], [Col_Name], [Col_Value]
FROM myTable
) AS a
PIVOT
(
MAX([Col_Value])
FOR [Col_Name] in ([Item_Num], [Item_Date], [Item_Name], [Item_App1], [Item_App2])
) AS p
ORDER BY [ID]
考虑到性能,有什么办法可以做到这一点?提前致谢。
【问题讨论】:
-
如果您关心性能,请不要以这种格式存储您的数据。只需使用包含 200 多列的常规记录,每列一个。
-
这只是您在使用 EAV 设计时会遇到的众多问题之一。事实上,您已经在示例数据中提供了一个 - 34567 是表中的有效“日期”,因为该列将允许该值按原样存储。
-
@GordonLinoff 我必须根据工作要求使用这种格式。
-
@SMor 同意 EAV。至于我发布的示例数据,对于造成的混乱表示歉意。这不是我的表格的确切数据,我只是输入了你看到的任何内容,只是为了展示一个例子。此外,整个表的值都是 nvarchar 数据类型。
标签: sql sql-server pivot