Mandt указан несколько раз, но не в запросе - PullRequest
0 голосов
/ 17 января 2019

Я получаю эту ошибку

Сообщение 8156, Уровень 16, Состояние 1, Строка 67
Столбец 'MANDT' был указан несколько раз для 'cte'. "

при попытке запустить приведенный ниже код, однако я не включаю столбец MANDT в свой запрос. Обе таблицы, которые я вызываю, имеют столбец MANDT, но у них также есть столбец STAT, и у меня не было проблемы с другой таблицей, пытающейся выполнить то же соединение, единственное, что у таблицы не было MANDT, только STAT был таким же.

Я попытался включить оба столбца MANDT с псевдонимом: JCDS_SOGR.MANDT as Client и TJ30T.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]

1 Ответ

0 голосов
/ 17 января 2019

В вашем CTE вы выбираете *. Так что если у вас есть два столбца с именем MANDT, это может вызвать конфликт. Удалить *. Это должно решить проблему, которую вы описали.

...