如果已经回答,我已经提前道歉,因为我找不到我想要的东西。
我希望有一个带有属性的零件编号表,以便我可以将零件主表连接到此属性表,以获取零件主文件中每个零件的有效属性列表。根据产品系列,不同的部件号属性会有所不同。例如,部件号ABC可能具有属性名称OD,ID和宽度,而部件号XYZ可能仅具有颜色和长度。记录看起来像这样:
ABC, OD, 10.125
ABC, ID, 8.125
ABC, WIDTH, 6.500
XYZ, COLOR, Blue
XYZ, LENGTH, 16.375
没问题。我接下来要做的是转动记录,以便我可以为同类产品创建规格表(按产品系列)。按产品系列的表格将具有字段名称的属性名称。例如,部分ABC在产品组“Round Widgets”中,而部分XYZ在产品组“Long Widgets”下。圆形小部件的查询表将具有字段PN,OD,ID和WIDTH,而长小部件的查询表将具有字段PN,COLOR和LENGTH。每个字段名称都是上述表格中的属性名称,部件号和属性值将是记录数据。
对于数据透视表字段PN,OD,ID和WIDTH,数据如下所示:
ABC, 10.125, 8.125, 6.500
我见过许多使用PIVOT的例子,但他们通常会对所需的字段进行硬编码。将为此透视图提供的查询已按产品组进行过滤,以便查询中的每个部件编号都应具有相同数量的字段以进行透视。
提前感谢您的帮助......
答案 0 :(得分:0)
你可以这样做。
Dynamic Pivot:
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT'],[' + [factor_label]
FROM [TEMP_lacp_factors]
ORDER BY '],[' + [factor_label]
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(
SELECT [date_],[issue_id],[cusip],[Factor_value],[factor_label]
FROM [TEMP_lacp_factors]
)t
PIVOT (MAX([factor_value]) FOR [factor_label]
IN ('+@years+')) AS pvt'
EXECUTE (@query)
Dynamic Pivot和Select Into: - 放下桌子;你动态创建它 Drop table tempTable
--Start creating all objects for Dyanmic Pivot
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT'],[' + [factor_label]
FROM [TEMP_lacp_factors]
ORDER BY '],[' + [factor_label]
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
-- Objects that are created above, are put into the table you are about to create below
'SELECT * INTO tempTable FROM (SELECT * FROM
(
SELECT [date_],[issue_id],[cusip],[Factor_value],[factor_label]
FROM [TEMP_lacp_factors]
)t
PIVOT (MAX([factor_value]) FOR [factor_label]
IN ('+@years+')) AS pvt) X'
EXECUTE (@query)
-- Select everything from the dynamically created table ('tempTable') to see results
Select * from tempTable
更改代码以满足您的需求。