Sql 在执行联接时是否可以获取和?
我有以下代码:Sql 在执行联接时是否可以获取和?,sql,oracle,birt,Sql,Oracle,Birt,我有以下代码: select id, p1.value as company, p2.value as budget FROM process p LEFT JOIN Param p1 on p1.ID = p.ID AND p1.NAME = 'Company' LEFT JOIN Param p2 ON p2.ID = p.ID AND p2.NAME = 'Budget' where type = 'Authorization'; 我几乎没有公司。这里的示例结果是: Compan
select id,
p1.value as company,
p2.value as budget
FROM process p
LEFT JOIN Param p1 on p1.ID = p.ID AND p1.NAME = 'Company'
LEFT JOIN Param p2 ON p2.ID = p.ID AND p2.NAME = 'Budget'
where type = 'Authorization';
我几乎没有公司。这里的示例结果是:
Company Budget
Goodis 10000
McDonalds 15000
Goodis 500
Goodis 100
Everest 100
McDonalds 1000
Everest 10000
我想做的是得到每个公司的预算总额(我不能在where子句中分离公司,因为我需要全部数据,而且有很多公司)。对我来说,仅仅用SQL来完成似乎有点难。我正在尝试做一个BIRT报告,所以,如果你有任何建议,让它达到BIRT水平,我也会非常高兴
这是一种方法,还是我的尝试毫无意义?使用
按p1分组。值与总和:
select
p.value as company,
COALESCE(SUM(p2.value), 0) as Totalbudget
FROM Param AS p
LEFT JOIN process AS p1 ON p.ID = p1.ID AND p.NAME = 'Company'
LEFT JOIN process AS p2 ON p.ID = p2.ID AND p.NAME = 'Budget'
GROUP BY p.value;
看看这是否有帮助-
SELECT id, company, SUM(NVL(budget, 0)) AS budget
FROM
(
SELECT id,
p1.value AS company,
p2.value AS budget
FROM process p
LEFT JOIN Param p1 on p1.ID = p.ID AND p1.NAME = 'Company'
LEFT JOIN Param p2 ON p2.ID = p.ID AND p2.NAME = 'Budget'
WHERE TYPE = 'Authorization'
)
WHERE company IS NOT NULL
GROUP BY id, company
我相信你想要一个分析函数:
select id, p1.value as company, p2.value as budget,
sum(p2.value) over (partition by p1.value) as CompanyBudget
FROM process p
LEFT JOIN Param p1 on p1.ID = p.ID AND p1.NAME = 'Company'
LEFT JOIN Param p2 ON p2.ID = p.ID AND p2.NAME = 'Budget'
where type = 'Authorization';
这将返回每行的总预算,但不会减少行数。我刚刚得到了与帖子中提到的相同的结果:(@Slim它应该工作得很好。你能从两个表param
和process
中发布一些示例数据吗?解释这个问题会很有帮助。ThanksIt工作不好,我会向你解释原因。:)问题是合并(SUM(p2.value),0)由于Totalbudget
正在获取返回(当前)行的总和,因此没有任何区别,因为我们没有获取与公司关联的所有行的总和。@Slim-请参见我的编辑,这只是一个猜测。这就是为什么我需要了解这两个表中的一些示例数据,以了解这两个表之间的关系,您还需要将where子句添加到左连接中,而不是where子句。感谢您的帮助!我又得到了同样的结果(