-1

これが私のCTEです-エラーを引き起こしています。エラーを理解するのを手伝ってください

CREATE TABLE [dbo].[myEmpTab](
[EMPNO] [int] NULL,
[ENAME] [varchar](10)  NULL,
[JOB] [varchar](20)  NULL,
[MGR] [int] NULL,
[HIREDATE] [datetime] NULL,
[SAL] [int] NULL
) ON [PRIMARY]

;
WITH MyCTE AS 
( 
  SELECT EMPNO, EName, Null as MGR, NULL as ManagerName
  FROM myEmpTab
  WHERE MGR IS NULL
  UNION ALL
  SELECT  EMPNO, EName, MGR, MyCTE.EName
  FROM myEmpTab
  INNER JOIN MyCTE ON myEmpTab.MGR = MyCTE.EMPNO
  WHERE myEmpTab.MGR IS NOT NULL 
)
SELECT * FROM MyCTE

SQLを実行していると、次のようなエラーが発生します

Msg 209, Level 16, State 1, Line 8
Ambiguous column name 'EMPNO'.
Msg 209, Level 16, State 1, Line 8
Ambiguous column name 'EName'.
Msg 209, Level 16, State 1, Line 8
Ambiguous column name 'MGR'.

エラーをキャッチできません。だから、誰かがたくさん持っていて、私がそれを修正するのを手伝ってください。ありがとう。

4

2 に答える 2

1

編集に続いて、おそらく次のようなものが必要です

;WITH MyCTE AS 
( 
  SELECT EMPNO, EName, NULL as MGR, CAST(Null AS  VARCHAR(10)) as ManagerName
  FROM myEmpTab
  WHERE MGR IS NULL
  UNION ALL
  SELECT  myEmpTab.EMPNO, myEmpTab.EName, MyCTE.MGR, MyCTE.EName
  FROM myEmpTab
  INNER JOIN MyCTE ON myEmpTab.MGR = MyCTE.EMPNO
  WHERE myEmpTab.MGR IS NOT NULL 
)
SELECT * FROM MyCTE
于 2012-09-17T11:54:20.103 に答える
0

内部で CTE を参照することはできないと思います。これを試して

WITH MyCTE AS 
( 
SELECT EMPNO, EName, MGR, Sal
FROM myEmpTab
WHERE MGR IS NULL
)

SELECT EMPNO, EName, MGR, Sal FROM MyCTE

UNION ALL

SELECT  e.EMPNO, e.EName, e.MGR, MyCTE.EName
FROM myEmpTab e
INNER JOIN MyCTE ON e.MGR = MyCTE.EMPNO
WHERE e.MGR IS NOT NULL 

また

WITH MyCTE AS 
( 
    SELECT EMPNO, EName, MGR, Sal
    FROM myEmpTab
    WHERE MGR IS NULL
),
MyCTE2 as
(
    SELECT EMPNO, EName, MGR, Sal FROM MyCTE

    UNION ALL

    SELECT  e.EMPNO, e.EName, e.MGR, MyCTE.EName
    FROM myEmpTab e
    INNER JOIN MyCTE ON e.MGR = MyCTE.EMPNO
    WHERE e.MGR IS NOT NULL 
)
SELECT * FROM MyCTE2
于 2012-09-17T09:32:00.350 に答える