我尝试从带有记录计数的oracle sql表中获取数据。我试过这样做,
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关键字未在预期的位置找到
我该怎么解决这个问题。
提前谢谢!
发布于 2015-07-08 14:36:31
在select语句中使用aggreagte函数。因此,不能简单地为其他列调用Select *。
为了方便起见,我给专栏取名为c2,c3....rename就像你想要的那样。如果没有提供别名,则可以指定列。
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 发布于 2015-07-08 16:17:17
我没有12c,所以不能测试,但也许这就是你想要的?
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函数来获得所要的结果。
https://stackoverflow.com/questions/31294869
复制相似问题