我有一个SQL查询,可以很好地从我们的数据库中获取过去2年的信息,当我尝试添加一个为SQL添加新条件的语句时问题出现了。
where ASSIGNED_REP = 'PERSON, SOME',
也许我这样做错了,但是我要拉出的一个列是这样设置的:
name_full AS ASSIGNED_REP,
所以我想如果我添加了where语句它应该只返回结果,其中该列包含我给它的用户名。但是我收到错误Oracle: ORA-00936: missing expression
。
我的SQL工作正常,直到我在第4行添加where ASSIGNED_REP = 'PERSON, SOME'
。
我是SQL的新手,所以我确信我错过了一些东西。
完整的SQL:
select
ccc.BID AS B_ID,
TTTT,
name_full AS ASSIGNED_REP where ASSIGNED_REP = 'PERSON, SOME', /* issue is here */
bbb.CUID,
bbb.BNN,
bbb.PGN,
ccc.TYP_CD AS CLM_TYP,
ccc.C_TYP AS SCLM_TYP,
C_DATE,
NEXT_DATE,
SUM(ccc.LINE) AS line_items,
SUM(ccc.AMT) AS c_amount,
SUM(ccc.CO_RSLVD) AS Z_RSLVD,
SUM(ccc.CU_RSLVD) AS C_RSVLD,
ccc.STATUS_TYP AS STATUS,
DATE_FOLLOW_UP,
bbb.STATE
from bstatus bbb
join display_view ccc on ccc.bnn = bbb.bn
left join user_profile up on uuu.zz_id = ccc.ASSIGNED_USER_ID
where ccc.C_DATE >= (sysdate - 730)
/* Also tried */
/* and ASSIGNED_REP = 'PERSON, SOME' */
group by ccc.BID,
TTTT,
uuu.name_full,
bbb.CUID,
bbb.BAN,
bbb.PGN,
ccc.TYP_CD,
ccc.C_TYP,
C_DATE,
NEXT_DATE,
ccc.STATUS_TYP,
DATE_FOLLOW_UP,
bbb.STATE
查询的结构是pretty well defined。你不能有多个where
clause1,它不属于选择列表的中间。
您想添加另一个条件,因此将其添加到现有的where
子句中:
select
ccc.BID AS B_ID,
TTTT,
uuu.name_full AS ASSIGNED_REP,
...
where ccc.C_DATE >= (sysdate - 730)
and uuu.name_full = 'PERSON, SOME'
group by ccc.BID,
...
请注意,您不能在where子句中使用ASSIGNED_REP
别名,您必须使用原始列名称。与上述相关的文件还包括(强调增加):
c_alias
为列表达式指定别名。 Oracle数据库将在结果集的列标题中使用此别名。
AS
关键字是可选的。别名在查询期间有效地重命名选择列表项。别名可以在order_by_clause中使用,但不能在查询中的其他子句中使用。
所以你可以order by ASSIGNED_REP
,但你不能在where
条款或其他任何地方使用它。
1我忽略了子查询......
你走在正确的轨道上。您要在此处执行的操作是添加到现有的WHERE子句中
SELECT ccc.BID AS B_ID
,TTTT
,ASSIGNED_REP
,bbb.CUID
,bbb.BNN
,bbb.PGN
,ccc.TYP_CD AS CLM_TYP
,ccc.C_TYP AS SCLM_TYP
,C_DATE
,NEXT_DATE
,SUM(ccc.LINE) AS line_items
,SUM(ccc.AMT) AS c_amount
,SUM(ccc.CO_RSLVD) AS Z_RSLVD
,SUM(ccc.CU_RSLVD) AS C_RSVLD
,ccc.STATUS_TYP AS STATUS
,DATE_FOLLOW_UP
,bbb.STATE
FROM bstatus bbb
JOIN display_view ccc ON ccc.bnn = bbb.bn
LEFT JOIN user_profile up ON uuu.zz_id = ccc.ASSIGNED_USER_ID
WHERE ccc.C_DATE >= (sysdate - 730)
AND name_full = 'PERSON, SOME'
GROUP BY ccc.BID
,TTTT
,uuu.name_full
,bbb.CUID
,bbb.BAN
,bbb.PGN
,ccc.TYP_CD
,ccc.C_TYP
,C_DATE
,NEXT_DATE
,ccc.STATUS_TYP
,DATE_FOLLOW_UP
,bbb.STATE
现在,您将只获得名为PERSON, SOME
的人过去两年的门票