【问题标题】:Making a new column based on a derived column sql query?基于派生列sql查询制作新列?
【发布时间】:2015-03-03 14:55:06
【问题描述】:

所以我有一个名为 TOY_DETAILS 的表,其中包含 ID、日期、Toy_obje、货币(可以是美元、英镑或欧元)和预算。

现在我想做一个 sql 查询,它会返回所有内容

  1. 一个计算列,其中包含以美元为单位的预算(因此转换率就像 1 英镑 = 1.5 美元和 1 欧元 = 1.2)
  2. 另一个计算列,其中包含以美元为单位的总预算。

我已经尝试过了。

SELECT ID, Date,Toy_object, currency, budget, 
CASE currency
WHEN 'GBP' THEN budget*1.5
WHEN 'EUR' THEN budget*1.2
ELSE budget
END AS USD_Value
(SELECT SUM(USD_Value) FROM PROJECT_DETAILS) AS Total_Budget
FROM PROJECT_DETAILS

我的问题是 2)。我希望 Total_Budget 成为列 USD_Value 的总和,但是我无法输入“SUM(USD_Value)”,因为“列不存在”?

提前致谢,

【问题讨论】:

  • 但是你想按什么分组?
  • 嗨,实际上不需要分组。但是我在下面得到了答案,不过感谢您查看我的问题!

标签: sql sql-server tsql


【解决方案1】:

您必须在SUM 中重复CASE 表达式:

SELECT ID, Date,Toy_object, currency, budget, 
       CASE currency 
          WHEN 'GBP' THEN budget*1.67 
          WHEN 'EUR' THEN budget*1.3 
       ELSE budget END AS USD_Value,
       SUM(CASE currency 
              WHEN 'GBP' THEN budget*1.67 
              WHEN 'EUR' THEN budget*1.3 
              ELSE budget 
            END) OVER() AS Total_Budget 
FROM PROJECT_DETAILS

【讨论】:

  • 非常感谢 Giorgos,我在想类似的事情,但我认为由于我缺乏 sql 知识,我最终会进入一些递归池!我会接受这个答案作为正确答案,再次感谢。
  • @TooManyProblems 看看我所做的编辑:您可以使用SUM 的窗口版本。不需要子查询。
  • 有趣,“OVER”是否允许您将聚合数据与检索到的数据放在一起?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2021-06-06
  • 2016-12-25
  • 1970-01-01
相关资源
最近更新 更多