2012-10-12 5 views
0

я получаю следующую ошибкуSQL Server 2005 PIVOT Ошибка синтаксиса

Msg 156, уровень 15, состояние 1, строка 10 Неправильный синтаксис около ключевого слова 'SELECT'. Msg 102, Level 15, State 1, Line 10 Неверный синтаксис рядом с ')'.

Когда я запускаю следующий запрос

SELECT TOP 100 * 
FROM 
(
SELECT [TimeStamp],[MeterID],[Value] 
FROM access_AMIData) AS source 
PIVOT 
(
SUM(Value) 
FOR MeterID IN (SELECT MeterNumber FROM access_tblFcppPvMeterList) 
) as pvt 
ORDER BY TimeStamp 

ошибка приходит с этой линией:

FOR MeterID IN (SELECT MeterNumber FROM access_tblFcppPvMeterList) 

Если изменить эту строку:

FOR MeterID IN (1,2,3,4) 

Он отлично работает .. Как я могу указать запрос Query внутри IN?

+0

Это неправда, он действительно работает –

+0

Он даже не проверит проверку синтаксиса [SQL Fiddle] (http://sqlfiddle.com/#!3/d41d8/5182). Если вы измените его на '[1], [2], [3], [4]', то это сработает. – RichardTheKiwi

+0

Было бы приемлемым обходным путем для того, чтобы столбцы были общими 1, 2, 3, 4, но на самом деле сохраняли значения для первых четырех метров? Это возможно с помощью 'ROW_NUMBER()'. Вы даже можете иметь номера счетчиков в столбцах параллельно с результатами: 4:54 PM | Счетчик 123 | $ 50 | Счетчик 456 | $ 75. Если вы хотите поделиться больше информацией о конечной цели, могут быть альтернативы. –

ответ

1

Вы не можете, по крайней мере, не в SQL 2005. Вы можете включить его в предложение WHERE вашего внутреннего запроса, но вам нужно жестко закодировать имена столбцов, если, конечно, вы не используете динамический SQL.

+0

Да, я боялся этого. –

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