与SQL Pivot查询语法斗争
有人告诉我我的SQL有什么问题吗,今天很难做到这一点。错误是: 消息156,第15级,状态1,第11行 关键字“select”附近的语法不正确 Msg 102,15级,状态1,第11行 “')附近的语法不正确 我想要的形状是。。。以年为列名,然后每月12行。下面只是为了说明形状与SQL Pivot查询语法斗争,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,有人告诉我我的SQL有什么问题吗,今天很难做到这一点。错误是: 消息156,第15级,状态1,第11行 关键字“select”附近的语法不正确 Msg 102,15级,状态1,第11行 “')附近的语法不正确 我想要的形状是。。。以年为列名,然后每月12行。下面只是为了说明形状 // var data = google.visualization.arrayToDataTable([ // ['Month', '2013', '2014', '2015'],
// var data = google.visualization.arrayToDataTable([
// ['Month', '2013', '2014', '2015'],
// ['Jan', 10, 30, 31],
// ['Feb', 11, 30, 32],
//]);
pivot的语法如下():
我不知道您的模式是什么,所以表/列名可能有错误。如果这没有帮助,我可以更准确地说,如果您共享您的模式和示例数据。pivot的语法如下():
我不知道您的模式是什么,所以表/列名可能有错误。如果这没有帮助,我可以更准确地说,如果您共享您的模式和示例数据。问题在于您的查询的以下部分
(select distinct year(TransactionDateTime) from quotations)
您需要在in子句中提供一个静态年份列表。问题在于查询的以下部分
(select distinct year(TransactionDateTime) from quotations)
您需要在in子句中提供一个静态的年份列表。query对我来说似乎没问题,我认为pivot是一个保留字,所以最好使用其他别名或至少添加括号:因为[pivot]query对我来说没问题,我认为pivot是一个保留字,所以最好使用其他别名或至少添加括号:因为[pivot]我在您的解决方案中的“从报价单”之后添加了一行“按左分组(datename(month,TransactionDateTime),3),年(TransactionDateTime)”,它成功了!thanksI在您的解决方案中的“报价单”之后添加了一行“group by left(datename(month,TransactionDateTime),3),year(TransactionDateTime)”,它成功了!谢谢
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(year(TransactionDateTime))
FROM Quotations
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query =
'SELECT *
FROM (
SELECT
left(datename(month,TransactionDateTime),3) as [month], year(TransactionDateTime) as [year],
count(*) as Total
FROM quotations
) as s
PIVOT
(
SUM(Total)
FOR [year] IN (' + @cols + ')
) AS pivot'
EXECUTE(@query)
(select distinct year(TransactionDateTime) from quotations)