繁体   English   中英

column name in value 如何收集列名和值

[英]Column name in value how to collect col name and value

我有一个包含列的表,其中值是列中的一个(规范和值)。 例子:

示例表值

而不是名称 spec1,spec* 我希望将实际的规范名称(如 Size)作为列名称,并且值应该是字符串中 : 之后的部分。 此外,我的表格包含 30 个规格字段,因此我想尽可能高效地完成它。

我想我需要一个 split 和一个 pivot 和 unpivot 才能让它工作。 但是,如果对此有更好的解决方案,我会很高兴。 任何帮助表示赞赏。

这是示例代码:在字符串中。

CREATE TABLE [dbo].[question](
    [Name] [varchar](5) NOT NULL,
    [articleNum] [varchar](6) NOT NULL,
    [spec1] [varchar](16) NOT NULL,
    [spec2] [varchar](18) NOT NULL,
    [spec3] [varchar](17) NOT NULL,
    [spec4] [varchar](26) NOT NULL,
    [spec5] [varchar](26) NOT NULL
) ON [PRIMARY]
GO
INSERT [dbo].[question] ([Name], [articleNum], [spec1], [spec2], [spec3], [spec4], [spec5]) VALUES (N'Stone', N'477665', N'size : Small', N'Height : 0.4 meter', N'width : 2.1 meter', N' details N/A : details N/A', N' details N/A : details N/A')
GO
INSERT [dbo].[question] ([Name], [articleNum], [spec1], [spec2], [spec3], [spec4], [spec5]) VALUES (N'Stone', N'477666', N'size : Medium', N'Height : 1 meter', N'width : 4 meter', N'shape : round', N'color : black')
GO
INSERT [dbo].[question] ([Name], [articleNum], [spec1], [spec2], [spec3], [spec4], [spec5]) VALUES (N'Stone', N'777666', N'size : Large', N'Height : 1 meter', N'width : 3 meter', N'Material : stainles steel', N'color : green')
GO
INSERT [dbo].[question] ([Name], [articleNum], [spec1], [spec2], [spec3], [spec4], [spec5]) VALUES (N'Stone', N'977666', N'Height : 1 meter', N'width : 4 meter', N'shape : round', N'color : black', N' details N/A : details N/A')
GO
INSERT [dbo].[question] ([Name], [articleNum], [spec1], [spec2], [spec3], [spec4], [spec5]) VALUES (N'Stone', N'977666', N'size : Medium', N'Height : 1 meter', N'width : 4 meter', N'shape : round', N'color : black')
GO

我建议使用 JSON 格式的列,这样您就可以完全自由地在其中输入必要的项目。 就像下面的例子

SELECT articleNum,
Name,
JSON_VALUE(JsonColumn, '$.spec1') AS People,
JSON_VALUE(JsonColumn, '$.spec2') AS Size
FROM question

你的桌子:

CREATE TABLE [dbo].[question](
[Name] [varchar](5) NOT NULL,
[articleNum] [varchar](6) NOT NULL,
[JsonColumn] [varchar](max) NOT NULL
) ON [PRIMARY]
INSERT [dbo].[question] ([Name], [articleNum], [spec1]) VALUES (N'Stone', N'477665', N'data as json')
GO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM