如何使用With语句创建视图?

时间:2014-08-06 11:41:27

标签: sql sql-server

我的查询在开头包含以下内容:

; With xxx as xxxxx

我无法使用语句创建视图,因此保留此声明至关重要。

编辑:这是代码:

; with numbered as (
Select part,taarich,hulia,mesirakabala,
rowno = row_number() OVER (Partition by parit    order.by taarich)
From tblMK)
Select a.rowno-1,a.part,  a.Julia,b.taarich,as.taarich_kabala,a.taarich,  a.mesirakabala,getdatediff(b.taarich,a.taarich) as due
From numbered a
Left join numbered b ON b.parit=a.parit
And b.rowno = a.rowno - 1
Where b.taarich is not null

2 个答案:

答案 0 :(得分:3)

with放在create view声明之后:

create view t2 as
    with t as (select 1 as col)
    select * from t;

Here是一个SQL小提琴,显示了这个例子。

答案 1 :(得分:1)

我认为你的问题是领先的分号。删除它,然后再试一次。

在SQL中,行末尾的分号是可选的,通常省略。

然而,WITH语句要求先前的语句(如果存在)以分号结束。

由于大多数人都省略了分号,因此许多作者会将分号放在WITH的开头,因此它会关闭之前的任何语句。

如果您的WITH是定义视图的第一行,分号将尝试终止视图定义。

编辑:回应评论
这可能需要几次通过,但下一步是清理您的ROW_NUMBER列。替换你的     rowno = row_number()OVER(parit order.by taarich分区)


    row_number()OVER(由taarich按部分顺序分区)为rowno

然后再试一次。 rowno =是一个赋值,rowno是一个别名,我很确定你真正想要的是什么。请注意,它是ORDER BY而不是ORDER.BY。检查“part”/“parit”的拼写是否是相同的字段拼写不同或有效?

清理它们,看看它是否在其他任何东西上窒息。