从具有不同标准的列中选择一个表-SQL Oracle
我有一个表,从其中一列中,数据应该根据另一列进行挑选。这可能是最好的展示 我的数据库: 预期结果: 所以我尝试使用从具有不同标准的列中选择一个表-SQL Oracle,sql,oracle,Sql,Oracle,我有一个表,从其中一列中,数据应该根据另一列进行挑选。这可能是最好的展示 我的数据库: 预期结果: 所以我尝试使用join,但可能是错误的,因为它都来自一个表。我被困在这一点上: SELECT b1.area as line, b2.budget/12 as flow_MTD, b2.budget as flow_BUDGET, b1.budget/12 as investment_products_MTD, b1.budget as investment_products_BUDGET
join
,但可能是错误的,因为它都来自一个表。我被困在这一点上:
SELECT b1.area as line, b2.budget/12 as flow_MTD, b2.budget as flow_BUDGET,
b1.budget/12 as investment_products_MTD, b1.budget as
investment_products_BUDGET,
b3.budget/12 as bonds_MTD, b3.budget as bonds_BUDGET,
b4.budget/12 as structure_MTD, b4.budget as structure_BUDGET
FROM budgets b1
JOIN budgets b2 ON b1.area=b2.area
JOIN budgets b3 ON b1.area=b3.area
JOIN budgets b4 ON b1.area=b4.area
where b1.limit = 'main'
and b1.neighbourhood = 'alpha'
and b2.neighbourhood = 'beta'
and b3.neighbourhood = 'delta'
and b4.neighbourhood = 'gamma'
这样做的正确方法是什么
编辑/更新:因为我的问题被标记为可能由
.. 除非能够纠正,否则该解决方案似乎行不通:
SELECT SUM(CASE WHEN t.neighbourhood = 'alpha' THEN t.value ELSE 0 END) AS alpha,
SUM(CASE WHEN t.neighbourhood = 'beta' THEN t.value ELSE 0 END) AS beta,
SUM(CASE WHEN t.neighbourhood = 'delta' THEN t.value ELSE 0 END) AS delta,
SUM(CASE WHEN t.neighbourhood = 'gamma' THEN t.value ELSE 0 END) AS gamma
FROM budgets t
这就是你要找的
SELECT b.area,
v.total_alpha / 12 AS monthly_alpha,
v.total_alpha,
v.total_beta / 12 AS monthly_beta,
v.total_beta,
v.total_gamma / 12 AS monthly_gamma,
v.total_gamma,
v.total_delta / 12 AS monthly_delta,
v.total_delta,
v.total_alpha + v.total_beta + v.total_gamma + v.total_delta AS total
FROM (SELECT b.area,
SUM(DECODE(b.neighbourhood, 'alpha', b.budget, 0)) AS total_alpha,
SUM(DECODE(b.neighbourhood, 'beta', b.budget, 0)) AS total_beta,
SUM(DECODE(b.neighbourhood, 'gamma', b.budget, 0)) AS total_gamma,
SUM(DECODE(b.neighbourhood, 'delta', b.budget, 0)) AS total_delta
FROM budgets b
GROUP BY b.area
) v
它被称为枢轴。搜索一些问题,使用“oracle”和“pivot”这两个词可能重复@FlorinGhita谢谢你的建议。但是,由于某些原因,用我的数据替换该数据会导致错误<代码>选择SUM(当t.neighbory='alpha'然后t.value ELSE 0 END时的情况)作为alpha,SUM(当t.neighbory='beta'然后t.value ELSE 0 END时的情况)作为beta,SUM(当t.neighbory='delta'然后t.value ELSE 0 END时的情况)作为delta,SUM(当t.neighbory='gamma'然后t.value ELSE 0 END时的情况)作为《预算》t@FlorinGhita的gamma,我的问题被重定向到了这里,这对我没有帮助,因为我的语法不适合它。没有人会帮助我,因为这个问题不是我的,我的问题被重新定向(死了)。我唯一能做的就是发布一个新问题,与这两个问题非常相似,可能也会被报告为重复问题。很好,谢谢:)这个问题的公认答案语法更简单。您的表中似乎没有
t.value
。