需要动态数据透视表?

时间:2016-06-02 13:01:40

标签: sql sql-server

如果已经回答,我已经提前道歉,因为我找不到我想要的东西。

我希望有一个带有属性的零件编号表,以便我可以将零件主表连接到此属性表,以获取零件主文件中每个零件的有效属性列表。根据产品系列,不同的部件号属性会有所不同。例如,部件号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的例子,但他们通常会对所需的字段进行硬编码。将为此透视图提供的查询已按产品组进行过滤,以便查询中的每个部件编号都应具有相同数量的字段以进行透视。

提前感谢您的帮助......

1 个答案:

答案 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

更改代码以满足您的需求。