缺少关键字ORA00905

问题描述 投票:-4回答:3

你好,你可以帮我吗?我得到错误缺少关键字。见下面的代码。提前致谢。

SELECT Datum, Wdomain, Lgstkproc, Username,
Case when LGSTKPROC = 'NAVUL'
         COUNT (unique username '-'palnumber end nr_pal_per_user_navul,
Case when LGSTKPROC !=‘NAVUL’
         COUNT (unique username '-'palnumber end nr_pal_per_user_veplaatst
From (
SELECT USERNAME, RES, RESTYPE, WDOMAIN, LGSTKPROC,  LOCNAME, ENDLOCNAME, PALNUMBER, TRUNC(SYSDATE-1) datum 
FROM TransportStock$VW TS
WHERE TRUNC(timestamp)<TRUNC(sysdate)-1
AND res NOT LIKE '%CONVS%'
)
Group by Username, Datum,  Lgstkproc, Wdomain
sql oracle
3个回答
0
投票

你错过了一个逗号,这里:

SELECT datum,
       wdomain,
       lgstkproc,
       username,
       COUNT (DISTINCT CASE WHEN lgstkproc = 'NAVUL' THEN 
                                 username || '-' || palnumber
                       END) AS nr_pal_per_user_navul,                --> comma missing here
       COUNT (DISTINCT CASE WHEN lgstkproc != 'NAVUL' THEN 
                                 username || '-' || palnumber
                       END) AS nr_pal_per_user_veplaatst
FROM (SELECT username,
             res,
             restype,
             wdomain,
             lgstkproc,
             locname,
             endlocname,
             palnumber,
             trunc(SYSDATE - 1) datum
      FROM transportstock$vw ts
      WHERE trunc(timestamp) < trunc(SYSDATE) - 1
        AND res NOT LIKE '%CONVS%'
     )
GROUP BY username,
         datum,
         lgstkproc,
         wdomain

如果正确格式化您编写的代码,事情会更加清晰。

此外,那些COUNTs没有多大意义 - 无论CASE的价值如何,lgstkprocs都选择相同的值。


0
投票

这没有意义:

Case when LGSTKPROC = 'NAVUL'
     COUNT (unique username '-'palnumber end nr_pal_per_user_navul,

我推测你想要:

count(distinct case when LGSTKPROC = 'NAVUL'
                    then username || '-' || palnumber
               end) as nr_pal_per_user_navul

0
投票

我非常感谢任何额外的帮助,根据戈登的建议我改变了几行,现在收到错误“找不到关键字的关键字”

选择基准,Wdomain,Lgstkproc,用户名,计数(当LGSTKPROC ='NAVUL'然后用户名||' - '|| palnumber结束时的不同情况)作为nr_pal_per_user_navul计数(当LGSTKPROC!='NAVUL'然后用户名||'时的不同情况 - '|| palnumber end)为nr_pal_per_user_veplaatst

           From (
           SELECT USERNAME, RES, RESTYPE, WDOMAIN, LGSTKPROC,  LOCNAME, ENDLOCNAME, PALNUMBER, TRUNC(SYSDATE-1) datum 
           FROM TransportStock$VW TS
           WHERE TRUNC(timestamp)<TRUNC(sysdate)-1
           AND res NOT LIKE '%CONVS%'
           )
           Group by Username, Datum,  Lgstkproc, Wdomain
© www.soinside.com 2019 - 2024. All rights reserved.