2016-03-04 99 views
1

我有这样的:一个新字段添加到PIVOT

SELECT Value AS FieldName, [42] AS [KeyID_42],[600] AS [KeyID_600] 
INTO ##Temp311037 
FROM 
(
    SELECT TransID, Value, FieldName 
    FROM 
    (
    SELECT TransID, Convert(VarChar(250), [AccountNbr]) AS [AccountNbr], [CoAdd1]) AS [CoAdd1], Convert(VarChar(250), [CoAdd2]) AS [CoAdd2], Convert(VarChar(250), [CoCity]) AS [CoCity], Convert(VarChar(250), [CoFax]) AS [CoFax] 
    FROM tblSQLContacts 
) p 
    UNPIVOT 
    (
    FieldName FOR Value IN 
    ([accountNbr], [CoAdd1], [CoAdd2], [CoCity], [CoFax]) 
    )AS unpvt 
) AS SourceTable 
PIVOT 
(
    MAX(FieldName) 
    FOR TransID IN ([42],[600]) 
) AS PivotTable 
WHERE [42] <> [600] 

而且我的输出是这样的:

FieldName   KeyID_42  KeyID_600 
AccountNbr   55664   55635 
ChoiceFundYN  0    1 
CoAdd1    PO Box 2200  1500 Mountain Drive 
CoAdd2    PO Box 7004  PO Box 4300 
CoCity    Las Vegas  Birmingham 
CoFax    5552355622  5552975152 

而这个数据来自表tblSQLContacts。那么,问题是,我将有一个大约20桌的巨大的UNION。所以,我希望能够将表名添加到该输出中,在它自己的字段中。所以最终的结果是:

FieldName   KeyID_42  KeyID_600   Table 
AccountNbr   55664   55635    tblSQLContacts 
ChoiceFundYN  0    1     tblSQLContacts 
CoAdd1    PO Box 2200  1500 Mountain Drive tblSQLContacts 
CoAdd2    PO Box 7004  PO Box 4300   tblSQLContacts 
CoCity    Las Vegas  Birmingham   tblSQLContacts 
CoFax    5552355622  5552975152   tblSQLContacts 

这可能吗?我似乎无法使其工作。理想情况下,我希望它成为第一个领域,但我会把它放在任何我能得到它的地方。

+1

您可以将一个硬编码的列放到名为table的pivot子查询中,并将其与您的表名相关联 - 因为每行的值相同,所以不应该影响您的透视。 – Taryn

+0

我将第一行更改为SELECT'tblSQLContacts'AS TableName,Value AS FieldName,[42] AS [KeyID_42],[600] AS [KeyID_600]并且工作正常!谢谢! –

回答

1

为了将表名添加到查询中,您将需要向您的数据透视表查询或子查询添加一个硬编码的值。您可以更改您的查询是这样的:

SELECT Value AS FieldName, 
    [42] AS [KeyID_42],[600] AS [KeyID_600], 
    TableName 
INTO ##Temp311037 
FROM 
(
    -- add hard-coded value here 
    SELECT TransID, Value, FieldName, 'tblSQLContacts' as TableName 
    FROM 
    (
    SELECT TransID, Convert(VarChar(250), [AccountNbr]) AS [AccountNbr], 
     [CoAdd1]) AS [CoAdd1], 
     Convert(VarChar(250), [CoAdd2]) AS [CoAdd2], 
     Convert(VarChar(250), [CoCity]) AS [CoCity], 
     Convert(VarChar(250), [CoFax]) AS [CoFax] 
     FROM tblSQLContacts 
    ) p 
    UNPIVOT 
    (
    FieldName 
    FOR Value IN ([accountNbr], [CoAdd1], [CoAdd2], [CoCity], [CoFax]) 
)AS unpvt 
) AS SourceTable 
PIVOT 
(
    MAX(FieldName) 
    FOR TransID IN ([42],[600]) 
) AS PivotTable 
WHERE [42] <> [600] 

因为该值将成为各行一样,它不应该改变你的枢轴的结果。