我尝试使用记录计数从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关键字
我该如何解决这个问题。
提前致谢!
答案 0 :(得分:2)
我猜您应该从第一行的*
中删除select statement
。试试下面的一个。
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
答案 1 :(得分:0)
您在select语句中使用了aggreagte函数。因此,您无法简单地为其他列调用Select *
。
这里为了方便我给列名称为c2,c3 ....重命名就像你想要的那样。 如果没有给出别名,您可以指定列的指定。
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
答案 2 :(得分:0)
我没有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_id的计数。我不确定你是否想要每个brand_id(count(*) over (partititon by brand_id)
或者不同brand_ids(count(distinct brand_id) over ()
)的计数,所以你必须使用count函数来获取你得到的结果。