【问题标题】:Incorrect Syntax near '=' SSRS Report Builder 3.0'=' SSRS Report Builder 3.0 附近的语法不正确
【发布时间】:2015-12-07 20:23:02
【问题描述】:

很抱歉,如果之前有人问过并回答过这个问题,但我无法找到解决我特定问题的答案。

我在尝试运行 ssrs 查询时收到以下消息,但我不确定如何更正它。通常,错误是指额外的空间或可以从复制和粘贴中提取的任何内容,但如果有的话我找不到它,我不确定还有什么问题。这是查询后跟的错误消息。任何帮助/cmets 将不胜感激

标题:Microsoft SQL Server 报表生成器

执行查询时出错。 '=' 附近的语法不正确。


附加信息:

“=”附近的语法不正确。 (Microsoft SQL Server,错误:102)

如需帮助,请点击:http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=09.00.4060&EvtSrc=MSSQLServer&EvtID=102&LinkId=20476

------------------"

SELECT 
company.cmp_name
,commodity.cmd_code
,commodity.cmd_name
,IIF(vTTSTMW_ChargeDetails.[Delivery Year]=@DeliveryYear, SUM(vTTSTMW_ChargeDetails.Charge),0) AS [Revenue Current Year]
,IIF(vTTSTMW_ChargeDetails.[Delivery Year]=@DeliveryYear-1, SUM(vTTSTMW_ChargeDetails.Charge),0) AS [Revenue Prior Year]
FROM
company
LEFT OUTER JOIN vTTSTMW_ChargeDetails
ON company.cmp_id = vTTSTMW_ChargeDetails.[Bill To ID]
LEFT OUTER JOIN commodity
ON vTTSTMW_ChargeDetails.[Order CMD Code] = commodity.cmd_code
GROUP BY
company.cmp_name
,commodity.cmd_code
,commodity.cmd_name

【问题讨论】:

  • 可以在 SSMS 中运行查询吗?
  • IIF 在 SQL 2012 中可用。在 2008 年无效。
  • 不,不幸的是它给了我同样的错误。
  • 对不起,我错过了标记这是 2012 年,我会改变它。

标签: sql-server reporting-services ssrs-2012 reportbuilder3.0


【解决方案1】:

如果您使用的是早于 2012 年的 SQL 版本,请尝试更改:

,IIF(vTTSTMW_ChargeDetails.[Delivery Year]=@DeliveryYear, SUM(vTTSTMW_ChargeDetails.Charge),0) AS [Revenue Current Year]
,IIF(vTTSTMW_ChargeDetails.[Delivery Year]=@DeliveryYear-1, SUM(vTTSTMW_ChargeDetails.Charge),0) AS [Revenue Prior Year]

到这里:

,SUM(CASE WHEN vTTSTMW_ChargeDetails.[Delivery Year]=@DeliveryYear THEN vTTSTMW_ChargeDetails.Charge ELSE 0 END) AS [Revenue Current Year]
,SUM(CASE WHEN vTTSTMW_ChargeDetails.[Delivery Year]=@DeliveryYear-1 THEN vTTSTMW_ChargeDetails.Charge ELSE 0 END) AS [Revenue Prior Year]

编辑

并尝试改变这个:

@DeliveryYear-1

到这里:

CONVERT(nvarchar(7), CAST(@DeliveryYear AS int)-1)

【讨论】:

  • 谢谢您,但是您提供的示例现在在 Msg 156, Level 15, State 1, Line 7 附近标记语法错误关键字“THEN”附近的语法错误。
  • [Delivery Year]@DeliveryYear的数据类型是什么?
  • 请尝试将vTTSTMW_ChargeDetails.[Delivery Year] 添加到 GROUP BY 子句中。
  • 暂时他们只是nvarchar
  • 添加到 group by 子句没有运气
【解决方案2】:

您可能需要将聚合放在 IIF 语句之外,如下所示:

SELECT 
      company.cmp_name
    , commodity.cmd_code
    , commodity.cmd_name
    , SUM(
        IIF(
            vTTSTMW_ChargeDetails.[Delivery Year] = @DeliveryYear, 
            vTTSTMW_ChargeDetails.Charge, 
            0
            )
        ) AS [Revenue Current Year]
    , SUM(
        IIF(
            vTTSTMW_ChargeDetails.[Delivery Year] = @DeliveryYear - 1, 
            vTTSTMW_ChargeDetails.Charge, 
            0
            ) 
        ) AS [Revenue Prior Year]
FROM
    company
    LEFT OUTER JOIN vTTSTMW_ChargeDetails ON company.cmp_id = vTTSTMW_ChargeDetails.[Bill To ID]
    LEFT OUTER JOIN commodity ON vTTSTMW_ChargeDetails.[Order CMD Code] = commodity.cmd_code
GROUP BY
      company.cmp_name
    , commodity.cmd_code
    , commodity.cmd_name

【讨论】:

  • 感谢 Nathan 的帮助,但这仍然会导致 '=' 错误。
  • 我测试过,SUM在IIF()之内还是之外都无所谓
猜你喜欢
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2011-03-11
  • 2014-02-16
  • 2017-01-11
  • 2020-02-06
相关资源
最近更新 更多