【问题标题】:Dynamic pivot - how to obtain column titles parametrically?动态枢轴 - 如何以参数方式获取列标题?
【发布时间】:2011-10-16 21:45:00
【问题描述】:

我希望为 SAP B1 (t-sql) 编写一个查询,它将按总和按月列出所有收入和费用项目。

我已使用 PIVOT 成功编写了一个查询,但我不希望列标题被硬编码为:Jan-11、Feb-11、Mar-11 ... Dec-11。

我希望以参数方式生成列标题,这样如果我输入:

-------------------------------------- 查询 - 选择标准 -------------------------------------- 过帐日期大于或等于 01.09.10 过帐日期小于或等于 31.08.11 [确定] [取消]

查询将生成以下列:

9 月 10 日、10 月 10 日、11 月 10 日、..... 8 月 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)

【问题讨论】:

    标签: tsql


    【解决方案1】:

    我不了解 SAP,但我想到了几件事:

    • 您似乎希望@listCol 在方括号内包含一组数字,例如[07],[08],[09]...。但是,您的代码似乎没有在此字符串的开头放置 [

    • 尝试替换行

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

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

    (在编辑您的问题时,我还在这两行的第一行的 AND 之前添加了一个空格。)

    【讨论】:

    • 嗨卢克,感谢您的回答。
    • 您好卢克,感谢您的回答。不幸的是,它并没有解决我的问题。我意识到解决方案将非常困难。幸运的是,我找到了这篇有用的文章:simple-talk.com/community/blogs/andras/archive/2007/09/14/… 我现在必须努力使这些想法适应我​​的问题。最好的问候 Leon Lai
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2016-05-17
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多