使用 SQL*Plus 从以前的 SELECT 中选择总计
Posted
技术标签:
【中文标题】使用 SQL*Plus 从以前的 SELECT 中选择总计【英文标题】:SELECT totals from previous SELECT using SQL*Plus 【发布时间】:2013-11-06 13:24:45 【问题描述】:使用 SQL*Plus 生成通过电子邮件发送给客户的列表,例如:
SET MARKUP html ON
SPOOL spool.html
SELECT order_number, entry_date, delivery_date, customer_order_number, order_totals_quantity, TRUNC(order_totals_sqm,2), order_totals_net_value FROM orders WHERE entry_date = SYSDATE;
我怎样才能创建一个行来显示列出的order_totals
字段的总数并使它们与这些字段保持一致?
即如果我为这些字段创建了单独的 SELECT COUNT()
,它会将它们列在前 3 个之下,而实际上它们需要位于原始 SELECT
之下。
更新:这就是我正在寻找的,如果可能的话。
other columns ... order_totals_quantity | TRUNC(order_totals_sqm,2) | order_totals_net_value
--------------------------------------------------------------------------------------------
Total | Total | Total
【问题讨论】:
能否请您显示完整的 SELECT 语句?您的示例是无效语句(缺少 FROM) 我相信group by grouping sets
的使用是您所追求的,但我需要查看预期结果示例才能知道您想如何处理它
我已经用例如更新了问题
【参考方案1】:
也许... 取决于您想要什么聚合以及什么表示唯一记录,以免错误地汇总数量。
SELECT order_number, entry_date, delivery_date, customer_order_number,
sum(order_totals_quantity), sum(TRUNC(order_totals_sqm,2)), sum(order_totals_net_value)
FROM orders
WHERE entry_date = SYSDATE;
GROUP BY GROUPING SETS ((order_number, entry_date, delivery_date, customer_order_number),
())
找到的示例:http://www.oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets.php
【讨论】:
查看您的链接,我想知道 OP 是否实际上不在GROUP BY ROLLUP
之后
我用例如更新了这个问题。如果有帮助,我正在寻找什么。
@user2656114 那么上面列出的 Group By Rollup 或 group by 分组集是否满足您的需求?【参考方案2】:
试试这个[假设您使用的是 oracle]:
SELECT order_number, entry_date, delivery_date, customer_order_number, order_totals_quantity, TRUNC(order_totals_sqm,2), order_totals_net_value,tot.a, tot.b
FROM orders, (select sum(order_totals_quantity) a, sum(order_totals_net_value ) b from orders WHERE entry_date = SYSDATE) tot
WHERE entry_date = SYSDATE;
【讨论】:
【参考方案3】:当您使用 SQL*Plus 时,有一种使用计算的更简单的方法。这样做的好处是无需在服务器上运行额外的 SQL。这是一个您可以根据自己的查询进行调整的示例:
BREAK ON report
COMPUTE SUM LABEL total OF a ON report
SELECT 1 AS a FROM dual UNION ALL
SELECT 2 AS a FROM dual UNION ALL
SELECT 3 AS a FROM dual;
A
-------------
1
2
3
-------------
6
3 rows selected.
您也可以使用其他聚合。这是完整文档的链接:COMPUTE。
【讨论】:
以上是关于使用 SQL*Plus 从以前的 SELECT 中选择总计的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL*Plus 中将参数(值)从函数传递/调用到“选择”stmt?