2017-10-05 44 views
0

嗨任何人都可以幫助我,而在SQL服務器蟾蜍創建視圖我得到低於error.Thanks在高級。創建在SQL服務器查看時出錯

USE [database]; 
GO 
SET ANSI_NULLS ON; 
GO 
SET QUOTED_IDENTIFIER ON; 
GO 
CREATE VIEW [dbo].[GCRM_CONTRACT_ENTITLEMENT] ("objid","CONTRACT__TITLE") 
AS 

(with mycte as (
SELECT table1.Column1 as objid, 
table1.Column2 CONTRACT__TITLE 

     FROM table1  
     WHERE 
     (
     (table1.struct_type = 0)     
    )  

) 

SELECT Stuff((SELECT ',' + cast(CONTRACT__TITLE as varchar(2000)) 
      FROM mycte t2 
      WHERE t2.[objid] = t1.[objid]    
      FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,1,'') AS [AVILABLE_ENTITLEMENT] 
    FROM mycte t1 
GROUP BY t1.[objid] 
); 
GO 

錯誤: - SQL Server數據庫錯誤:關鍵字'with'附近的語法不正確。

+0

'View'不接受參數 –

+0

你能告訴我哪一行我無法弄清楚。謝謝 – Shilpi

+0

第一行'CREATE VIEW [dbo]。[GCRM_CONTRACT_ENTITLEMENT](「objid」,「CONTRACT__TIT LE「)''在視圖中不允許'(」objid「,」CONTRACT__TITLE「)' –

回答

1

CTE必須是批次的第一部分,文檔是here

更改您的視圖的身體是這樣的:

WITH mycte(objid, 
      CONTRACT__TITLE) 
    AS (
    SELECT table1.Column1 AS objid, 
      table1.Column2 AS CONTRACT__TITLE 
    FROM table1 
    WHERE table1.struct_type = 0) 
    SELECT STUFF(
       (
        SELECT ','+CAST(CONTRACT__TITLE AS VARCHAR(2000)) 
        FROM mycte t2 
        WHERE t2.[objid] = t1.[objid] FOR XML PATH(''), TYPE 
       ).value('.', 'varchar(max)'), 1, 1, '') AS [AVILABLE_ENTITLEMENT] 
    FROM mycte t1 
    GROUP BY t1.[objid]; 

編輯: 添加了INCIDENT__ID

WITH mycte(objid, 
      CONTRACT__TITLE, 
      INCIDENT__ID) 
    AS (
    SELECT TABLE1.COLLUMN1 AS objid, 
      TABLE1.COLLUMN2 AS CONTRACT__TITLE, 
      TABLE2.COLLUMN1 AS INCIDENT__ID 
    FROM TABLE1 
    WHERE TABLE1.struct_type = 0) 
    SELECT STUFF(
       (
        SELECT ','+CAST(CONTRACT__TITLE AS VARCHAR(2000)) 
        FROM mycte t2 
        WHERE t2.[objid] = t1.[objid] FOR XML PATH(''), TYPE 
       ).value('.', 'varchar(max)'), 1, 1, '') AS [AVILABLE_ENTITLEMENT], 
      [INCIDENT__ID] 
    FROM mycte t1 
    GROUP BY t1.[objid], 
       t1.[INCIDENT__ID]; 
+0

謝謝你真的很有用,但我想在該視圖中多一個coulmns,因爲我現在只有一個「AVILABLE_ENTITLEMENT」,所以當我嘗試添加更多的coulms時,出現像SQL Server數據庫錯誤那樣的錯誤:Column'mycte.INCIDENT__ID'在選擇列表,因爲它不包含在聚合函數或GROUP BY子句中 – Shilpi

+0

如果要在select中添加另一個未聚合的列,例如不是'max','min','count'等之一,那麼你還需要將列名添加到你的'group by'中。如果你正在聚合你的cte,你需要在聲明cte時添加一個'mycte.INCIDENT__ID'的引用,然後在那裏添加一個「group by」。 – dbajtr

+0

您可以修改上面的查詢和iam獲取以下錯誤查找錯誤 - SQL Server數據庫錯誤:創建視圖或函數失敗,因爲沒有列名稱被指定爲列1. SELECT min(INCIDENT__ID),Stuff((SELECT',' + cast(CONTRACT__TITLE as varchar(2000)) FROM mycte t2 WHERE t2。[objid] = t1。[objid] and t2。[INCIDENT__ID] = t1。[INCIDENT__ID] FOR XML PATH('',TYPE) .value('。','varchar(max)'),1,1,'')AS [AVILABLE_ENTITLEMENT] FROM mycte t1 GROUP BY t1。[objid],t1。[INCIDENT__ID] – Shilpi