简体   繁体   English

将多个计数返回到一个查询中

[英]Returning multiple counts into one query

I am trying to return the count values into multiple columns (ORDERS_1990, ORDERS_1991) but I am receiving the error "missing keyword". 我试图将计数值返回到多列(ORDERS_1990,ORDERS_1991)中,但是我收到错误“缺少关键字”。

SELECT
 (SELECT COUNT(*) FROM ORDERS WHERE (ODATE BETWEEN '01-JAN-90' AND '31-DEC-90')),
 (SELECT COUNT(*) FROM ORDERS WHERE (ODATE BETWEEN '01-JAN-91' AND '31-DEC-91'))
INTO ORDERS_1990, ORDERS_1991
FROM ORDERS;

You're most likely getting the message because you're using SELECT ... INTO ... outside of a PLSQL block. 您最有可能收到该消息,因为您在PLSQL块之外使用SELECT ... INTO ... If you just want to label the results, just name the subqueries normally; 如果只想标记结果,则只需正常命名子查询即可;

SELECT
 (SELECT COUNT(*) FROM ORDERS 
  WHERE (ODATE BETWEEN '01-JAN-90' AND '31-DEC-90')) ORDERS_1990,
 (SELECT COUNT(*) FROM ORDERS 
  WHERE (ODATE BETWEEN '01-JAN-91' AND '31-DEC-91')) ORDERS_1991
FROM DUAL;

You can use condition aggregation: 您可以使用条件聚合:

SELECT SUM(CASE WHEN ODATE BETWEEN '01-JAN-90' AND '31-DEC-90' THEN 1 ELSE 0 END),
       SUM(CASE WHEN ODATE BETWEEN '01-JAN-91' AND '31-DEC-91' THEN 1 ELSE 0 END)
INTO ORDERS_1991, ORDERS_1992
FROM ORDERS;

I'm not sure why you are getting a "missing keyword" error. 我不确定为什么会收到“缺少关键字”错误。 I would expect the error to be that you are returning too many rows. 我希望错误是您返回太多行。 I think the following should work (assuming you are in a PL/SQL block): 我认为以下方法应该有效(假设您位于PL / SQL块中):

SELECT (SELECT COUNT(*) FROM ORDERS WHERE (ODATE BETWEEN '01-JAN-90' AND '31-DEC-90')),
       (SELECT COUNT(*) FROM ORDERS WHERE (ODATE BETWEEN '01-JAN-91' AND '31-DEC-91'))
INTO ORDERS_1990, ORDERS_1991
FROM dual;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM