2017-04-26 78 views
0

如何使用語句創建視圖? 我得到的錯誤就可以了:使用語句創建視圖

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. 

所以,我只需要使用創建使用選擇視圖,其基於WITH聲明SQL SERVER 2014

+0

而且我得到一個錯誤,如果我把最初建立一個觀點: – mondayguy

回答

1

是總是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

CREATE VIEW View_Name AS 
WITH CTE_Name (Columns) AS (SELECT QUERY) 
SELECT QUERY using the CTE Table 
GO 
0
CREATE or replace 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) 
+0

這是行不通的 – mondayguy

+0

這裏是臨時的聲明? – mondayguy

+0

用於查看的一般語法....... 創建視圖view_name as //您的選擇語句 –

1

視圖表的使用條款是選擇可選的前綴:

WITH query_name (column_name1, ...) AS 
    (SELECT ...) 

SELECT ... 

也是如此,當with中使用觀點:

CREATE VIEW ... 
WITH ... 
SELECT ... 
; 

參見:http://modern-sql.com/feature/with