2015-08-09 3 views
0

У меня есть динамический сводный запрос, и я хочу повернуть на businessaccountnumber, который, как я знаю, существует в transaction_table, но он продолжает возвращать это «Недопустимое имя столбца« bizi ».» - для линия 1.SQL Server 2008 R2: Недопустимое имя столбца в запросе PIVOT

DECLARE @Output nvarchar(max) = N'' 
DECLARE @PivotList varchar(max) 


SELECT 
    @PivotList = COALESCE(@PivotList + ', ', N'') + N'[' + bizid + N']' 

FROM (SELECT DISTINCT 
    BusinessAccountNumber [bizid] 
FROM transaction_table 
WHERE postingdate BETWEEN '1/01/2015' AND '2/01/2015' 
) AS CustProds; 

SET @Output = 'SELECT [bizName],[bizi] 
    , ' + @PivotList + ' 
FROM (select businessname as [bizName],businessaccountnumber as [bizi], 
     sum((Transactionamount*(-1))) as [Transactionamount] 
     FROM transaction_table 
     WHERE postingdate between ''1/01/2015'' and ''2/01/2015'' 
     GROUP BY businessaccountnumber,businessname) as P 
PIVOT (SUM(Transactionamount) FOR P.bizi IN (' + @PivotList + ')) AS PVT' 

EXEC sp_executesql @Output; 

EDIT: Благодаря спин за указание свою ошибку, но теперь у меня есть новая ошибка.

выход я ищу это:

Date  | bizid12| bizid13| bizid14... 
01/01/2015| $1 | $3  | $56 
01/02/2015| $12 | $34 | $3 
..... 


DECLARE @Output nvarchar(max) = N'' 
DECLARE @PivotList varchar(max) 


SELECT 
    @PivotList = COALESCE(@PivotList + ', ', N'') + N'[' + bizid + N']' 

FROM (SELECT DISTINCT 
    BusinessAccountNumber [bizid] 
FROM transaction_table 
WHERE postingdate BETWEEN '1/01/2015' AND '2/01/2015' 
) AS CustProds; 

SET @Output = 'SELECT [sp_date] 
    , ' + @PivotList + ' 
FROM (select Convert(varchar,postingdate,101) as [sp_date] 
     ,businessaccountnumber as [bizi], 
     sum((Transactionamount*(-1))) as [Transactionamount] 
     FROM transaction_table 
     WHERE postingdate between ''1/01/2015'' and ''2/01/2015'' 
     GROUP BY businessaccountnumber) as P 
PIVOT (SUM(Transactionamount) FOR P.bizi IN (' + @PivotList + ')) AS PVT' 

EXEC sp_executesql @Output; 

Ошибка теперь говорит:

Msg 8180, уровень 16, состояние 1, строка 1
Statement (s) не может быть подготовлен ,

Msg 102, Level 15, State 1, Line 1
Неправильный синтаксис около 'Qry12090'.

Msg 1056, Level 15, State 1, Line 1
Число элементов в списке выбора превышает максимально допустимое число 4096 элементов.

ответ

1

Вы не можете выбрать bizi в запросе SELECT [bizName],[bizi] используя его в PIVOT FOR P.bizi IN. Удалить [bizi] от выбранного заявления

+0

А я вижу! Спасибо. но теперь у меня новая ошибка. –

+0

@JaseVillam well, 4096 - максимальное количество колонок для выбора – Backs

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