首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: ORA-00923: FROM关键字未在预期的位置找到

错误: ORA-00923: FROM关键字未在预期的位置找到
EN

Stack Overflow用户
提问于 2015-07-08 13:55:25
回答 2查看 2.1K关注 0票数 1

我尝试从带有记录计数的oracle sql表中获取数据。我试过这样做,

代码语言:javascript
复制
SELECT  *,
        (COUNT(BRAND_ID) AS TOTAL) 
FROM    
(
    SELECT  BRAND_ID, 
            BRAND_CODE,      
            BRAND_TITLE 
    FROM    BRAND 
    WHERE   ACTIVE = '1' 
    ORDER BY BRAND_TITLE ASC 
    OFFSET 10 ROWS 
    FETCH NEXT 10 ROWS ONLY 
) BRAND 
LEFT JOIN 
((
    SELECT  PRODUCT_ID, 
            PRODUCT_SKU_ID, 
            PRODUCT_WEB_ID, 
            PRODUCT_TITLE, 
            PRODUCT_SALES_PRICE, 
            PRODUCT_REGULAR_PRICE, 
            PRODUCT_RATING 
    FROM    PRODUCT 
    WHERE   
    (
        PRODUCT_TYPE='B' 
    OR  PRODUCT_TYPE='R' 
    ) 
    AND AVAILABILITY='1' 
)  PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE

当我执行这个时,我得到了以下错误,

错误: ORA-00923: FROM关键字未在预期的位置找到

我该怎么解决这个问题。

提前谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-07-08 14:36:31

在select语句中使用aggreagte函数。因此,不能简单地为其他列调用Select *

  1. 首先,您应该为为轻松选择的内部列提供一个别名。
  2. 然后选择外部的列,选择
  3. 因为Select中的一个列是使用agg函数,所以Group应该由select中的其他列来完成。

为了方便起见,我给专栏取名为c2,c3....rename就像你想要的那样。如果没有提供别名,则可以指定列。

代码语言:javascript
复制
 SELECT c2,c3,c4,c5,c6,c7,c8,c9,c10,
            COUNT(BRAND_ID) AS TOTAL 
    FROM    
    (
        SELECT  BRAND_ID ,
                BRAND_CODE AS c2,      
                BRAND_TITLE AS c3
        FROM    BRAND 
        WHERE   ACTIVE = '1' 
        ORDER BY BRAND_TITLE ASC 
        OFFSET 10 ROWS 
        FETCH NEXT 10 ROWS ONLY 
    ) BRAND 
    LEFT JOIN 
    ((
        SELECT  PRODUCT_ID AS c4, 
                PRODUCT_SKU_ID AS c5, 
                PRODUCT_WEB_ID AS c6, 
                PRODUCT_TITLE AS c7, 
                PRODUCT_SALES_PRICE AS c8, 
                PRODUCT_REGULAR_PRICE AS c9, 
                PRODUCT_RATING  AS c10
        FROM    PRODUCT 
        WHERE   
        (
            PRODUCT_TYPE='B' 
        OR  PRODUCT_TYPE='R' 
        ) 
        AND AVAILABILITY='1' 
    )  PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE
    Group By c2,c3,c4,c5,c6,c7,c8,c9,c10 
票数 0
EN

Stack Overflow用户

发布于 2015-07-08 16:17:17

我没有12c,所以不能测试,但也许这就是你想要的?

代码语言:javascript
复制
SELECT  *
FROM    
(
    SELECT  BRAND_ID, 
            BRAND_CODE,      
            BRAND_TITLE 
    FROM    (select b.*,
                    count(brand_id) over () total
             from   BRAND b
    WHERE   ACTIVE = '1' 
    ORDER BY BRAND_TITLE ASC 
    OFFSET 10 ROWS 
    FETCH NEXT 10 ROWS ONLY 
) BRAND 
LEFT JOIN 
((
    SELECT  PRODUCT_ID, 
            PRODUCT_SKU_ID, 
            PRODUCT_WEB_ID, 
            PRODUCT_TITLE, 
            PRODUCT_SALES_PRICE, 
            PRODUCT_REGULAR_PRICE, 
            PRODUCT_RATING 
    FROM    PRODUCT 
    WHERE   
    (
        PRODUCT_TYPE='B' 
    OR  PRODUCT_TYPE='R' 
    ) 
    AND AVAILABILITY='1' 
)  PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE;

这将使用一个分析查询来获取整个表中所有brand_ids的计数,然后再过滤行。但是,我不确定您是否想要每个brand_id的计数(count(*) over (partititon by brand_id)或distinct brand_ids (count(distinct brand_id) over ()) ),所以您必须使用count函数来获得所要的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31294869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档