【发布时间】: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