Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从具有不同标准的列中选择一个表-SQL Oracle_Sql_Oracle - Fatal编程技术网

从具有不同标准的列中选择一个表-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