这应该是个SQL行列转换问题?
现有若干产品BOM信息(主件名称、元件名称、元件用量、元件分类)
想把【分类】作为列名查询 ,详见图示:
(适用需求:
1、主件信息量大 不能语句写定 要能通用
2、分类只会出现有限个 或A或B或C 可以直接写定;
3、列出的元件出现最多的行数 就是主件重复的行数;其余类别行数不足的 不能重复显示元件
9、附加^_^ 有没有分类也不写定的语句、这样分类字段出现N个类别 查询就自动形成N个列 ! O(∩_∩)O)
(附建表语句:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CS_BOM]') AND type in (N'U'))
DROP TABLE [dbo].[CS_BOM]
GO
CREATE TABLE [dbo].[CS_BOM]
(
[主件] [varchar](20) NULL,
[元件] [varchar](60) NULL,
[用量] [float] NULL,
[元件分类] [varchar](9) NOT NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[CS_BOM]
([主件],[元件],[用量],[元件分类])
VALUES
(N'产品xxx1', N'A1', 1, N'A类')
,(N'产品xxx1', N'A2', 2, N'A类')
,(N'产品xxx1', N'A3', 2, N'A类')
,(N'产品xxx1', N'B1', 1, N'B类')
,(N'产品xxx1', N'B3', 1, N'B类')
,(N'产品xxx1', N'C1', 1, N'C类')
,(N'产品xxx2', N'A2', 1, N'A类')
,(N'产品xxx2', N'A3', 1, N'A类')
,(N'产品xxx2', N'B1', 1, N'B类')
,(N'产品xxx2', N'B3', 2, N'B类')
,(N'产品xxx2', N'B5', 2, N'B类')
,(N'产品xxx2', N'B6', 2, N'B类')
,(N'产品xxx2', N'C1', 1, N'C类')
,(N'产品xxx2', N'C2', 1, N'C类')
,(N'产品xxx2', N'C3', 1, N'C类')
,(N'产品xxx2', N'C4', 1, N'C类')
,(N'产品xxx2', N'C5', 1, N'C类')
,(N'产品xxx2', N'C6', 1, N'C类')
GO
select * from CS_BOM
分析过程已发布博客:https://blog.csdn.net/jerbo/article/details/130348105
理论上,分类是不会直接写在表上,一般有个分类表,儿这个产品表只是记录这个分类的id,这样方便业务处理数据