2017-10-05 19 views
0

こんにちは、私はSQLサーバーのヒゲのビューを作成する際に助けてください。SQL Serverでビューを作成中にエラーが発生しました

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 ( "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]; 

EDIT: 追加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

ありがとうthats実際には働いたが、私はただ1つだけ "AVILABLE_ENTITLEMENT"ので、私はより多くのcoulmsをSQL Serverのようなエラーを取得しようと追加しようとしたので、そのビューでcoulmnsをもう1つ欲しいデータベースエラー: 'mycte.INCIDENT__ID'集計関数またはGROUP BY句に含まれていないためリストを選択してください – Shilpi

+0

集計されていない選択項目に別の列を追加する場合'max'、' min'、 'count'などではなく、' group by'に列名を追加する必要があります。自分の中に集約している場合は、cteを宣言する際に 'mycte.INCIDENT__ID'への参照を追加し、そこに 'group by'を追加する必要があります。 – dbajtr

+0

上記のクエリを修正して、次のエラーが表示される可能性があります。参照エラー - SQL Serverデータベースエラー:列1に列名が指定されていないため、ビューまたは関数の作成に失敗しました。 SELECT min(INCIDENT__ID)、Stuff((SELECT ' + mycte T2からキャスト(VARCHARとしてCONTRACT__TITLE(2000)) T2【のObjID] = T1。〔のObjID]とT2 [INCIDENT__ID] = T1 [INCIDENT__ID】XMLパス用 ( '')、TYPE) 。値( '。'、 'varchar(max)')、1,1、 '')AS [AVILABLE_ENTITLEMENT] FROM mycte t1 GROUP BY t1。[objid]、t1。[INCIDENT__ID] – Shilpi

関連する問題