Mandt 多次指定但不在查询中

Mandt Specified Multiple Times But Not in Query

我收到这个错误

Msg 8156, Level 16, State 1, Line 67
The column 'MANDT' was specified multiple times for 'cte'."

在尝试 运行 下面的代码时,我没有在查询中包含 MANDT 列。我调用的两个 table 确实有一个列 MANDT,但它们都有 STAT 列,我对另一个 table 尝试没有问题相同的连接,唯一的是 table 没有 MANDT,只有 STAT 是相同的。

我试图将 MANDT 两列都包含在别名中:JCDS_SOGR.MANDT as ClientTJ30T.MANDT as Client2 分别和一起包含,但没有成功。收到相同的错误消息。

;WITH cte AS
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY STAT ORDER BY UDATE) AS Rn,
        *,
        LAG(UDATE) OVER (PARTITION BY STAT ORDER BY UDATE) AS PrevUDate,
        COUNT(*) OVER (PARTITION BY STAT) AS [Count]
    FROM
        JCDS_SOGR
    JOIN
        TJ30T on JCDS_SOGR.STAT = TJ30T.ESTAT
    WHERE
        OBJNR = 'IE000000000010003137'
)
SELECT
    MAX(rn) AS [Count],
    OBJNR, STAT, TXT30,
    SUM(CASE 
           WHEN rn % 2 = 0 
              THEN DATEDIFF(d, PrevUDate, UDATE) 
           WHEN rn = [Count] 
              THEN  DATEDIFF(d, UDATE, GETDATE())   
           ELSE 0 
        END) AS DIF
FROM
    cte
GROUP BY
    OBJNR, STAT, TXT30

这是我提到的另一个查询,它适用于相同的代码。

;with cte
AS
(
    select ROW_NUMBER() OVER(partition by STAT Order by UDATE ) as Rn  
      , *
      , LAG(UDATE) OVER(partition by STAT Order by UDATE ) As PrevUDate
      , COUNT(*) OVER(partition by STAT) As [Count]
    from JCDS_SOGR
    join TJ02T on JCDS_SOGR.STAT = TJ02T.ISTAT
    where OBJNR = 'IE000000000010003137'
    and TJ02T.SPRAS = 'E'
)
select Max(rn) As [Count]
  , OBJNR,STAT,TXT30 
  , SUM(CASE WHEN rn%2=0 THEN DATEDIFF(d,PrevUDate,UDATE) 
    WHEN rn=[Count] THEN  DATEDIFF(d,UDATE,getDate())   
    ELSE 0 END) as DIF
from cte
group BY OBJNR, STAT,TXT30

预期的结果是这样

[COUNT   OBJNR                  STAT    TXT30           DIF
1   IE000000000010003137    I0099   Available   2810][1]

在您的 CTE 中,您选择了 *。因此,如果您有两个名为 MANDT 的列,这可能会导致冲突。去掉 *。那应该可以解决您描述的问题。