日期:2014-05-17  浏览次数:20817 次

看下我这个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    &nb