что не так с этим SQL-запросом с помощью сводной - PullRequest
0 голосов
/ 23 декабря 2011

Я пишу SQL-запрос, используя pivot, и я получаю следующие ошибки:

Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'select'.
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near ')'.

и запрос, который я написал:

select * 
from (
        select a.ID as id,
            a.dataValue as value
        from dbo.TableA a (nolock)
        where a.ID in (select b.ID from dbo.TableB b(nolock))
            and a.someOtherId = '4000'
            and a.DT = '2/16/2011 12:00:00'
    )as data
    pivot
    (
        sum([value])
        for [id] in (select ID from dbo.TableB (nolock))
    ) as pvt

Может кто-нибудь помочь мне в этом??Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Согласно документам Microsoft , вы не можете использовать select после in: вы должны перечислить значения вручную.

[<column that contains the values that will become column headers>]
    IN ( [first pivoted column], [second pivoted column],
    ... [last pivoted column])
) AS <alias for the pivot table>

Предполагая, что select b.ID from dbo.TableB b(nolock) возвращает 1, 2, 3, вы можете переписать свой код так:

select * 
from (
    select a.ID as id,
        a.dataValue as value
    from dbo.TableA a (nolock)
    where a.ID in (1,2,3)
        and a.someOtherId = '4000'
        and a.DT = '2/16/2011 12:00:00'
)as data
pivot
(
    sum([value])
    for [id] in ([1],[2],[3])
) as pvt
0 голосов
/ 23 декабря 2011

Невозможно динамически построить список полей в предложении for in.

 for [id] in (select ID from dbo.TableB (nolock)) 

Это не разрешено. Вы должны явно перечислить имена столбцов (Извините)

Изменение: выберите ID из dbo.TableB To: (Field1, field2, Field3) - фактические имена полей, которые вы хотите вернуть

Пример:

-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...