Динамический круг - как получить заголовки столбцов параметрически? - PullRequest
0 голосов
/ 16 октября 2011

Я хочу написать запрос для SAP B1 (t-sql), в котором будут перечислены все статьи доходов и расходов по сумме и месяцу за месяцем.

Я успешно написал запрос с использованием PIVOT, но я делаюне хочу, чтобы заголовки столбцов были жестко запрограммированы, как: 11 января, 11 февраля, 11 марта ... 11 декабря.

Скорее, я хочу, чтобы заголовки столбцов генерировались параметрически, чтобы при вводе:

--------------------------------------
Query - Selection Criteria
--------------------------------------

Posting Date      greater or equal        01.09.10

Posting Date      smaller or equal        31.08.11

[OK]   [Cancel]

В запросе будут сгенерированы следующие столбцы:

10 сентября, 10 октября, 10 ноября, ..... 11 августа

Я думаю, что DYNAMIC PIVOT может сделать свое дело.Поэтому я изменил один SQL-запрос, полученный на другом форуме, в соответствии с моими целями, но он не работает.Я получаю сообщение об ошибке: Incorrect Syntax near 20100901.

Может ли кто-нибудь помочь мне найти мою ошибку?

Примечание. В SAP B1 '[% 1]' является входной переменной

Вот мой запрос:

/*Section 1*/

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)

-------------------------------------
/*Section 2*/

SELECT @listCol = 
STUFF(
   ( SELECT DISTINCT '],[' + CONVERT(VARCHAR, MONTH(T0.RefDate), 102)
       FROM JDT1 
        FOR XML PATH(''))
     , 1, 2, '') + ']' 

------------------------------------
/*Section 3*/

SET @query = '
SELECT * FROM 
(
   SELECT 
        T0.Account,
        T1.GroupMask,
        T1.AcctName,
        MONTH(T0.RefDate) as [Month],   
        (T0.Debit - T0.Credit) as [Amount]
    FROM dbo.JDT1 T0
   JOIN dbo.OACT T1 ON T0.Account = T1.AcctCode 
   WHERE
      T1.GroupMask IN (4,5,6,7) AND
      T0.[Refdate] >= '[%1]' AND
      T0.[Refdate] <= '[%2]'
 ) S
PIVOT 
(
    Sum(Amount)
    FOR [Month] IN ('+@listCol+')
) AS pvt
'

--------------------------------------------
/*Section 4*/

EXECUTE (@query)

1 Ответ

0 голосов
/ 16 октября 2011

Я не знаю SAP, но на ум приходит пара вещей:

  • Похоже, вы хотите, чтобы @listCol содержал набор чисел в квадратных скобках, например [07],[08],[09].... Однако ваш код, похоже, не ставит [ в начале этой строки.

  • Попробуйте заменить строки

    T0.[Refdate] >= '[%1]' AND
    T0.[Refdate] <= '[%2]'
    

    с

    T0.[Refdate] >= ''[%1]'' AND
    T0.[Refdate] <= ''[%2]''
    

(Я также добавил пробел перед AND в первой из этих двух строк, когда редактировал ваш вопрос.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...