2016-03-04 2 views
1

Что у меня есть это:Добавить новое поле в сводную

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. Ну, проблема в том, что у меня будет массивный UNION около 20 таблиц. Таким образом, я хотел бы иметь возможность добавить имя таблицы в этот вывод в своем собственном поле. Таким образом, конечный результат будет следующим:

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 со значением вашего имени таблицы - поскольку значение для каждой строки одинаково, оно не должно влиять на ваш стержень. – 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] 

Поскольку значение будет одинаковым для каждой строки, он не должен изменять свой результат поворота.

Смежные вопросы