看下我这个sql错在哪?主要想学with as的用法
本帖最后由 wangbiao_97 于 2012-11-07 14:43:58 编辑
with tb1 as
(select name as '姓名', 科目='语文', 语文 as result from [Temp].[dbo].[行转列]),
with tb2 as
(select name as '姓名', 科目='数学', 数学 as result from [Temp].[dbo].[行转列]),
with tb3 as
(select name as '姓名', 科目='物理', 物理 as result from [Temp].[dbo].[行转列])
select * from
(select * from tb1
union all
select * from tb2
union all
select * from tb3 ) tb4
报错
消息 156,级别 15,状态 1,第 4 行
关键字 'with' 附近有语法错误。
消息 319,级别 15,状态 1,第 4 行
关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。
消息 102,级别 15,状态 1,第 5 行
',' 附近有语法错误。
消息 319,级别 15,状态 1,第 6 行
关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。
[最优解释]
WITH tb1
AS ( SELECT name AS '姓名' ,
科目 = '语文' ,
语文 AS result
FROM [Temp].[dbo].[行转列]
),
tb2
AS ( SELECT name AS '姓名' ,
科目 = '数学' ,
数学 AS result
FROM [Temp].[dbo].[行转列]
),
tb3
AS ( SELECT name AS '姓名' ,
科目 = '物理' ,
物理 AS result
FROM [Temp].[dbo].[行转列]
)
SELECT *
FROM ( SELECT *
FROM tb1
UNION ALL
SELECT *
FROM tb2
UNION ALL
SELECT *
FROM tb3
) tb4
[其他解释]
多个CTE不能有多个with
[其他解释]
你速度真快,谢谢,是对的 。
[其他解释]
首先:with的前面你掉了 ; (分号)
然后,如果你想用多个with,那么语法是:with tmp as() tmp2 as() 。。。
未完待续
[其他解释]
如果with前面没有其他语句,可以不加;,如果有,必须加
[其他解释]
我感觉还是加着好,反正加它一定不错,但是不加就可能错!
保险起见!
像这样:我在sql里面写with,但是with前面有select * from kaoqinB
select * from kaoqinA
尽管这跟with不大噶,但是要是不加它会提示,缺少分号!
[其他解释]
你的博客我回复了
[其他解释]
谢谢 花 神
你好多的花,我就一个小三角!
[其他解释]
我也“花”了好多时间