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