请教SQL server 中pivot的详细用法及语法规则:

zhhn717 2009-05-22 10:24:14
请教SQL server 中pivot的详细用法及语法规则:


请帮忙检查一下这段语句的语法问题呗。
create table test2(id int,name varchar(20),quarter char,profile1 int)
insert into test2 values(1,'a',1,1000)
insert into test2 values(1,'a',2,2000)
insert into test2 values(1,'a',3,4000)
insert into test2 values(1,'a',4,5000)
insert into test2 values(2,'b',1,3000)
insert into test2 values(2,'b',2,3500)
insert into test2 values(2,'b',3,4200)
insert into test2 values(2,'b',4,5500)
select * from test2
select *id,name,
[1] as "一季度",
[2] as "二季度",
[3] as "三季度",
[4] as "四季度"
from test2
pivot
(count([profile1])
for [quarter] in ([1],[2],[3],[4])
) pvt
总是提示count([profile1])这行,括号处有语法问题。。一直没弄明白。
...全文
1593 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrfangjun 2012-02-24
  • 打赏
  • 举报
回复
在2000里运行语句提示:
服务器: 消息 170,级别 15,状态 1,行 9
Line 9: Incorrect syntax near '('.

该怎样处理?
zhhn717 2009-06-02
  • 打赏
  • 举报
回复
那为什么我设置时会提示语法错误呢。。
我很诧异。。
风_雨_晴 2009-06-02
  • 打赏
  • 举报
回复
我也很诧异,我是2008,可能2005不是这样吧
zhhn717 2009-06-02
  • 打赏
  • 举报
回复
那为什么我设置时会提示语法错误呢。。
我很诧异。。
风_雨_晴 2009-06-02
  • 打赏
  • 举报
回复
2000转过来的兼容级别是80,所以要设成90
zhhn717 2009-06-02
  • 打赏
  • 举报
回复
好使了。。太感谢了。。。请问你是在哪找到的。。高手。。呵呵。。
风_雨_晴 2009-06-02
  • 打赏
  • 举报
回复
2005里是用sp_dbcmptlevel
sp_dbcmptlevel <databasename>, 90
风_雨_晴 2009-06-02
  • 打赏
  • 举报
回复
2005里是用sp_dbcmptlevel
sp_dbcmptlevel <databasename>, 90
zhhn717 2009-06-02
  • 打赏
  • 举报
回复
哎。。真是的。。为什么就不好使呢。。明明没有问题的啊。。
zhhn717 2009-06-01
  • 打赏
  • 举报
回复
忘记了,,应该是开发版吧。。。这也有关系吗??
还有那个pivot命令,我原来用的数据库是2000的,也可以在2005中打开,但那命令就是不好使,,后又新建个2005的新库就好使了。
那不是兼容的吗??怎么还会有这样的问题呢。
风_雨_晴 2009-05-26
  • 打赏
  • 举报
回复 1
不知道你的SQL SERVER是什么版本的?
风_雨_晴 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhhn717 的回复:]
dberp3hf 是指数据库名吗??还是什么命令,,如果是数据库名的话,我换为自己的库名,但是它又提示90处有错误。为什么呢。。90是int型的吧。
不是数据库名也试了,,仍然有错。无奈,,就说有语法错误。。
[/Quote]
不好意思dberp3hf是我自己的库名,忘改了
zhhn717 2009-05-25
  • 打赏
  • 举报
回复
谢谢各位的回答。。
zhhn717 2009-05-25
  • 打赏
  • 举报
回复
dberp3hf 是指数据库名吗??还是什么命令,,如果是数据库名的话,我换为自己的库名,但是它又提示90处有错误。为什么呢。。90是int型的吧。
不是数据库名也试了,,仍然有错。无奈,,就说有语法错误。。
JonasFeng 2009-05-22
  • 打赏
  • 举报
回复
楼上的已经修改了。
附加介绍
PIVOT 关系运算符对表值表达式进行操作以获得另一个表。
PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来转换表值表达式,并在必要时对最终输出中所需的任何其余的列值执行聚合

相反的有unpivot
贾桂权 2009-05-22
  • 打赏
  • 举报
回复
create table test2(id int,name varchar(20),quarter char,profile1 int)
insert into test2 values(1,'a',1,1000)
insert into test2 values(1,'a',2,2000)
insert into test2 values(1,'a',3,4000)
insert into test2 values(1,'a',4,5000)
insert into test2 values(2,'b',1,3000)
insert into test2 values(2,'b',2,3500)
insert into test2 values(2,'b',3,4200)
insert into test2 values(2,'b',4,5500)
select * from test2
select id,name,
[1] as 一季度,
[2] as 二季度,
[3] as 三季度,
[4] as 四季度
from test2
pivot
(count([profile1])
for [quarter] in ([1],[2],[3],[4])
) pvt
/*
id name quarter profile1
----------- -------------------- ------- -----------
1 a 1 1000
1 a 2 2000
1 a 3 4000
1 a 4 5000
2 b 1 3000
2 b 2 3500
2 b 3 4200
2 b 4 5500

(8 行受影响)

id name 一季度 二季度 三季度 四季度
----------- -------------------- ----------- ----------- ----------- -----------
1 a 1 1 1 1
2 b 1 1 1 1

(2 行受影响)
*/
风_雨_晴 2009-05-22
  • 打赏
  • 举报
回复
语法是没错的。你的数据库是2000转过来的吧,需要改一下兼容级别
ALTER DATABASE dberp3hf
SET COMPATIBILITY_LEVEL = 90

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧