Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL Group BY via column substr_Sql_Oracle_Select_Group By_Count - Fatal编程技术网

Oracle SQL Group BY via column substr

Oracle SQL Group BY via column substr,sql,oracle,select,group-by,count,Sql,Oracle,Select,Group By,Count,我们正在编写一个简单的选择,计算有多少产品具有相同的前4个字符。我们的产品ID为10位/字符 但是,运行此操作时,我们会得到: SQL错误[936][42000]:ORA-00936:缺少表达式 你知道怎么做吗?问题在于方括号。Oracle不支持这种语法。这些标识符可能不需要引用,因此: SELECT SUBSTR(PRODID,1, 4) AS [PROD4], COUNT(*) AS [NumberOfRows] FROM [sch].[ProdTable] GROUP BY SUBST

我们正在编写一个简单的选择,计算有多少产品具有相同的前4个字符。我们的产品ID为10位/字符

但是,运行此操作时,我们会得到:

SQL错误[936][42000]:ORA-00936:缺少表达式


你知道怎么做吗?

问题在于方括号。Oracle不支持这种语法。这些标识符可能不需要引用,因此:

SELECT SUBSTR(PRODID,1, 4) AS [PROD4], COUNT(*) AS [NumberOfRows] 
FROM [sch].[ProdTable] 
GROUP BY SUBSTR(PRODID,1, 4)
如果确实需要引用标识符(例如,如果表名是作为区分大小写的名称创建的,或者确实需要大小写混合的列别名),则可以使用双引号:

SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) NumberOfRows
FROM sch.ProdTable 
GROUP BY SUBSTR(PRODID,1, 4)

问题在于方括号。Oracle不支持这种语法。这些标识符可能不需要引用,因此:

SELECT SUBSTR(PRODID,1, 4) AS [PROD4], COUNT(*) AS [NumberOfRows] 
FROM [sch].[ProdTable] 
GROUP BY SUBSTR(PRODID,1, 4)
如果确实需要引用标识符(例如,如果表名是作为区分大小写的名称创建的,或者确实需要大小写混合的列别名),则可以使用双引号:

SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) NumberOfRows
FROM sch.ProdTable 
GROUP BY SUBSTR(PRODID,1, 4)

只是对@GMB的答案进行了一点扩展

[附表][可生产]

在Oracle中,引用对象的语法不正确。不要将它们括在
[]
方括号内:

SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) "NumberOfRows"
FROM sch."ProdTable"
GROUP BY SUBSTR(PRODID,1, 4)
然而,如果您真的想使用方括号来命名对象(这会非常难看),您可以使用带引号的标识符。它以双引号开始和结束
。这也使得区分大小写,并且在引用该对象时必须始终与双引号一起使用

FROM sch.ProdTable 
在SQL中,除非表是以这种方式创建的,否则不需要这样做。您仍然可以使用带引号的标识符用方括号命名列的别名:

create table "[t]" as select 'hi' as "[str]" from dual;
select * from "[t]";

[str]
-----
hi

只是对@GMB的答案进行了一点扩展

[附表][可生产]

在Oracle中,引用对象的语法不正确。请不要将它们括在
[]
方括号中:

SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) "NumberOfRows"
FROM sch."ProdTable"
GROUP BY SUBSTR(PRODID,1, 4)
然而,如果你真的想用方括号来命名你的对象(这真的很难看),你可以使用带引号的标识符。它以双引号开始和结束。这也会使then区分大小写,并且在引用该对象时必须始终使用双引号

FROM sch.ProdTable 
在SQL中,除非以这种方式创建表,否则不需要这样做。您仍然可以使用带引号的标识符用方括号命名列的别名:

create table "[t]" as select 'hi' as "[str]" from dual;
select * from "[t]";

[str]
-----
hi

不,这并不是说如果你使用带引号的标识符,Oracle会抱怨方括号
“[PROD4]”
“[ProdTable”]
是对象的有效值。@LalitKumarB:我认为OP使用方括号作为引用字符(例如在T-SQL中)。是的,这是实际问题。是的,这解决了我的答案。我像T-SQL一样接近它,没有意识到我使用了括号而不是引号!不,这并不是说如果你使用带引号的标识符,Oracle会抱怨方括号
“[PROD4]”
“[ProdTable”]
是对象的有效值。@LalitKumarB:我认为OP使用方括号作为引用字符(例如在T-SQL中)。是的,这是实际问题。是的,这解决了我的答案。我像T-SQL一样接近它,没有意识到我使用了括号而不是引号!哦,不,我们不会那样做的。用括号表示表名听起来有问题。谢谢你的提示!哦,不,我们不会那样做的。用括号表示表名听起来有问题。谢谢你的提示!