【发布时间】:2021-11-26 07:29:40
【问题描述】:
我有下面的示例设备表和数据。我正在尝试找到一种将行转置或旋转为列的方法,同时随着时间的推移添加更多设备(行)和更多属性(列),同时保持查询完整,但我找不到这样做的好方法。使用 SQL Server 2019。 (还想知道 JSON 格式是否是我想做的更好的存储格式?)
所需的输出:
iPad 2021 iPad mini 2021 ......
price 329.00 499.00
Releasedate 2011-09-14 2011-09-14
ScreenSize 10.2 8.3
ScreenResolutionWidth 1620 1488
ScreenResolutionHeight 2160 2266
.....
属性的值可以是数字、字符串、日期、布尔值或空值。
创建表和数据的SQL:
CREATE TABLE [device](
[id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](100) NULL,
[price] [decimal](18, 2) NULL,
[Releasedate] [date] NULL,
[ScreenSize] [decimal](18, 1) NULL,
[ScreenResolutionWidth] [int] NULL,
[ScreenResolutionHeight] [int] NULL
)
SET DATEFORMAT ymd
INSERT INTO [device] (Name, price, Releasedate, ScreenSize, ScreenResolutionWidth, ScreenResolutionHeight) VALUES
('iPad 2021', 329.00, CONVERT(DATETIME, '2011-09-14', 120), 10.2, 1620, 2160),
('iPad mini 2021', 499.00, CONVERT(DATETIME, '2021-09-14', 120), 8.3, 1488, 2266)
【问题讨论】:
-
这能回答你的问题吗? SQL Server dynamic PIVOT query?
-
它没有。问题和答案与固定的列数有关,它不是同一类型的布局,它不能解决在能够处理不同的列和行数的同时保持查询相同的问题。
-
链接的欺骗不是固定的行数。这就是为什么它是动态的。
-
动态列数呢?
-
如果表的定义发生变化,您将更新引用它的查询;这是正常的开发周期。您可以根据当前定义构建动态数据透视表,如果将来需要添加新列,也可以将该列添加到查询中。动态枢轴不会改变这一点。它仍然是一个需要更新的查询。不要尝试进行动态的动态查询,那是疯狂的道路。
标签: sql sql-server tsql pivot sql-server-2019