1

在 Oracle 11g Express 中,我有以下查询:

select t1.product_name, SUM(t1.product_cost_per_month)
FROM table1 t1 INNER JOIN table2 t2 on (t1.product_name = t2.product_name)
WHERE t2.date > sysdate
GROUP BY t1.product_name

这有效,它返回每月产品成本的总和,在某个日期之后按产品分组(我在这里仅使用 sysdate 作为示例)。

但是,我想显示一些关于每个产品的附加描述,即供应商。所以我使用这段代码:

select t1.product_name, SUM(t1.product_cost_per_month), t2.vendor
FROM table1 t1 INNER JOIN table2 t2 ON (t1.product_name = t2.product_name)
WHERE t2.date > sysdate
GROUP BY t1.product_name

这不起作用,因为所有变量都需要对它们应用聚合函数才能使用“分组依据”,但是对于“供应商”之类的聚合函数似乎毫无意义......那么有没有办法做到这一点?

我可能会写一个简短的 pl/sql 例程来解决,但我想知道是否有一种纯粹的 SQL 方法可以做到这一点?

4

1 回答 1

1

供应商也应包含在 GROUP BY 子句中。

GROUP BY t1.product_name, t2.vendor

实现您正在做的事情的另一种技术是嵌套查询:

SELECT t1.product_name,
    (
        select sum(product_cost_per_month) 
         from table2 t2 
         where 
            t1.product_name = t2.product_name 
            and t2.date > sysdate
    ) as total_product_cost,
    t1.another_field,
    t1.another_field2,
    t1.another_field3
FROM table1

(为任何错误道歉,我没有测试这个,但这应该给你它的要点)

于 2012-06-10T18:16:22.483 回答