对临时表中的两列求和

Posted

技术标签:

【中文标题】对临时表中的两列求和【英文标题】:Sum two columns from temp table 【发布时间】:2017-02-08 12:15:13 【问题描述】:

我是 SQL 新手,不知道如何,欢迎任何帮助。

脚本如下:

SELECT
    Provider,
    StartYear,
    CAST(YEAR([EndYear]) AS INT) AS 'EndYear'
INTO 
    #a
FROM 
    TABLE1

SELECT
    *, SUM(EndYear - StartYear) AS 'Years'
FROM 
    #a

我收到错误消息:

a.provider 在选择列表中无效,因为它不包含在内 在聚合函数或 GROUP BY 子句中

样本数据

Provider    StartYear   EndYear 
A1          1940        15/04/2016 00:00 
A2          1930        08/06/2016 00:00 
A3          1932        04/06/2016 00:00 
A2          1932        15/06/2016 00:00 
A1          1944        01/07/2016 00:00

【问题讨论】:

编辑您的问题并提供示例数据和所需结果。 使用sqlfiddle.com提供一些示例数据 您使用的是哪个 DBMS? 我正在使用 Microsoft SQL 服务器管理工​​作室 没问题。可能需要一段时间才能找到自己的方式(尤其是学习格式化)。如果@GordonLinoff 帮助了你,请考虑accepting his answer。这会奖励贡献者并帮助其他人找到可行的答案。 【参考方案1】:

您不需要临时表。我想你想要这样的东西:

SELECT t1.*,
       (t1.EndYear - t1.StartYear) as Years
FROM table1 t1;

或:

SELECT t1.*,
       DATEDIFF(year, t1.StartYear, t1.EndYear) as Years
FROM table1 t1;

编辑:如果您真的想对这些值求和,只需删除 t1.* 并添加 sum()

SELECT SUM(t1.EndYear - t1.StartYear) as Years
FROM table1 t1;

在您的情况下,您应该修复列的名称。称为“年”的东西不应该是日期时间。但是,转换很容易:

SELECT SUM(YEAR(t1.EndYear) - t1.StartYear) as Years
FROM table1 t1;

【讨论】:

感谢 Gordon 的快速响应,我的 startyear 字段是一个整数,而我的 endyear 字段是日期/时间,所以我需要将 endyear 转换为整数,我能想到的唯一方法是创建一个临时表? @user5963361 。 . .你不需要一个临时表。

以上是关于对临时表中的两列求和的主要内容,如果未能解决你的问题,请参考以下文章

如何对来自不同表MySQL的两列求和

MYSQL 从存储过程中的临时表中选择 JOIN 不起作用

查询表的一个城镇的两列

MySQL中的两种临时表

如何通过比较两个表中的两列来更新表中的列

两个表,一个表中的两列关联另一个表的id,如何将这个表中的两列显示为另一个表id对应的内容