sql - 使用 with 语句创建 View

标签 sql sql-server view with-statement

如何使用with语句创建 View ? 我遇到了错误:

    WITH temp as (
select uu.email, u.logintime, u.region, p.id as panelid, p.panelname, p.numberofdownloads, dimensionType + ' (' + dimensionValue + ')' as filter
from stat_users u
left join stat_panels p
on u.id=p.sessionid
left join stat_filters f
on p.id=f.panelid
left join users uu
on uu.id=u.userid
where uu.Organization = 'name' AND
     year(logintime) between 2015 and 2017
    and panelname is not  null
)


CREATE VIEW final as(
    select aa.email, aa.logintime, aa.region, aa.panelname, aa.numberofdownloads as downloads, case when len(aa.filters) > 0 then left(aa.filters, len(aa.filters)-1) else '' end as filters
    from (
    Select distinct a.email, a.logintime, a.region, a.panelname, a.numberofdownloads,
                (
                    Select b.filter + ', ' AS [text()]
                    From temp b
                    Where b.panelid=a.panelid
                    ORDER BY b.panelid
                    For XML PATH ('')
                ) filters
    from temp a
    ) aa

) 我收到这样的错误:

> Incorrect syntax near the keyword 'CREATE'. 'CREATE VIEW' must be the
> first statement in a query batch.

所以,我只需要使用基于Sql server 2014上的WITH语句的选择来创建 View

最佳答案

是的,CREATE 始终必须是查询批处理中的第一个语句

CREATE VIEW vFinal AS 
WITH Temp AS (
SELECT uu.email, u.logintime, u.region, p.id AS panelid, p.panelname, p.numberofdownloads, dimensionType + ' (' + dimensionValue + ')' AS Filter
FROM stat_users u
LEFT JOIN stat_panels p ON u.id=p.sessionid
LEFT JOIN stat_filters f ON p.id=f.panelid
LEFT JOIN users uu ON uu.id=u.userid
WHERE uu.Organization = 'name' AND
                        YEAR(logintime) BETWEEN 2015 AND 2017
                        AND panelname IS NOT  NULL
)
SELECT aa.email, aa.logintime, aa.region, aa.panelname, aa.numberofdownloads AS downloads, CASE WHEN LEN(aa.filters) > 0 THEN LEFT(aa.filters, LEN(aa.filters)-1) else '' end as filters
    FROM (
    SELECT DISTINCT a.email, a.logintime, a.region, a.panelname, a.numberofdownloads,
                (
                    SELECT b.filter + ', ' AS [text()]
                    FROM temp b
                    WHERE b.panelid=a.panelid
                    ORDER BY b.panelid
                    FOR XML PATH ('')
                ) filters
    FROM temp a
    ) aa

GO

使用CTE创建 View 表的语法

CREATE VIEW View_Name AS
WITH CTE_Name (Columns) AS (SELECT QUERY)
SELECT QUERY using the CTE Table
GO

关于sql - 使用 with 语句创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43630622/

相关文章:

mysql - SQL 查询以查找跨多个组的唯一值

python - 如何强制 Django 使用服务名称连接到 Oracle

c# 2008 SQL Server 快速连接字符串

Scala 示例 - 具有上下文边界错误的特征类型参数?

iphone - 相机 View 在 iPhone 上不起作用,但在其他 iPhone 上起作用

Mysql:创建一个仅显示一对多关系子集的 View

mysql - 从列名中删除后缀

mysql - 获取MYSQL加密 key

php - 如何将这两个查询合并到一个 INSERT INTO 中?

sql-server - 调用表值函数时添加查询提示