【问题标题】:SQL Pivot "Incorrect syntax near the keyword 'PIVOT'."SQL Pivot “关键字 'PIVOT' 附近的语法不正确。”
【发布时间】:2016-12-05 16:06:59
【问题描述】:

我是在 SQL 中使用 Pivot 的新手,但遇到了一些麻烦。

当我尝试将数据透视表嵌入到我的选择查询中时,我不断收到错误消息,尽管阅读了几个网页,但我似乎无法弄清楚。

我正在开发一个仪表板数据库,它将在查询中包含几个数据透视表 (5),每个仪表板一个。这可能吗?

我得到的错误是:

消息 156,级别 15,状态 1,第 38 行 关键字“PIVOT”附近的语法不正确。

我的查询如下所示

SELECT 
    /* Query for dashboard 1 **/
    [ProjectUID] AS [Project UID],
    [ + 8 Regular selects not related to the pivot  ]

    /* Query for dashboard 2 **/
    [...]

        /* Query for dashboard 3 **/
    [...]

        /* Dashboard WOWs */
    (SELECT * FROM [PB_Customer])
    PIVOT
        (
            COUNT (MValue) 
            for MValue
                in (
                [Customer],
                [MNeeds],
                [Bousa],
                [backbook]
                )
        ) AS pvt_table_wow

    FROM    [Table 1], [Table 2], [Table 3] 

    WHERE   Table1.ProjectUID=.Table2PROJECTUID 
            AND Table2.[Ping] IS NOT NULL 
            AND Table2.[Bousa] NOT IN ('0')
            AND Table1.ProjectUID=Table3.PUID;

谁能帮帮我?

【问题讨论】:

  • 您不能在数据透视表中使用*。你需要指定列名和别名——看这个——>technet.microsoft.com/en-us/library/…
  • 就你所展示的,在 /* Dash board WOWs */ 之前应该有一个 FROM。具体在哪里,取决于查询。看一下这个。 msdn.microsoft.com/en-us/library/ms177410.aspx
  • 你没有在它上面给你的子查询起别名,但也许那是或不应该是一个子查询,这很难说,因为你在枢轴下面有另一个 FROM 和 WHERE 子句。 .. 发布您的所有代码,它可以提供一些启示。
  • 您不能让 SELECT 子句中的子查询返回多于一列和多于一行。除此之外,您可能想写的是(SELECT * FROM [PB_Customer] PIVOT (...) AS pvt_table_wow),但正如我所说的那样,这行不通。
  • @Hogan 虽然最好不要这样做,但使用 *... 并没有什么不正确的地方,除非我不确定这是否应该是子查询

标签: sql sql-server pivot


【解决方案1】:

您必须为子查询设置别名

改变

(SELECT * FROM [PB_Customer]) PIVOT

(SELECT * FROM [PB_Customer]) c PIVOT

【讨论】:

  • 那行不通。投反对票
  • @pianocomposer,你看到这个问题了吗?我希望您没有尝试按原样运行它。
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2020-12-18
相关资源
最近更新 更多