SQL Server:查询以获取表 1 的 Col1 中的值的总和,以获取表 2 的 Col2 中的条件

Posted

技术标签:

【中文标题】SQL Server:查询以获取表 1 的 Col1 中的值的总和,以获取表 2 的 Col2 中的条件【英文标题】:SQL Server : query to get sum of values in Col1 of Table1 for a condition in Col2 of Table 2 【发布时间】:2018-03-12 20:57:28 【问题描述】:

我有两张桌子。 Table1 有 Col1 和 Col2,Table2 有 Col1 和 Col3。 所以 col1 名称在两个表中都很常见。

我需要一个查询,该查询应该对常见 ROW ID(Table1-col1 值)的匹配字符串求和

附上这个截图:

【问题讨论】:

您可以使用 [table name].[column name] 访问列 欢迎来到 Stack Overflow!你的文字图片isn't very helpful。它不能被复制到编辑器中,而且它的索引不是很好,这意味着有相同问题的其他用户不太可能在这里找到答案。请edit您的帖子直接合并相关文本(最好使用复制+粘贴以避免转录错误)。 您能说明一下您的要求吗?您要对哪一列或哪几列求和?哪一列包含您正在调节的数据?哪些列将Table1 连接到Table2?你的标题暗示Col2Table2,但问题说它在Table1 两个表中的我的 col1 包含相同的 ID。所以这是使用JOIN的常用列。我需要的查询是 T1.C2 有诸如“成功”、“失败”之类的条目,它们出现了很多次,而 T2.C2 中的所有成本条目都是数字的。所以,我想显示成功的输出,总成本是添加与 T1C1 ID 内联的所有成本,以及与 T2C1 ID 内联的失败“总成本”。所以,最后我会得到成功行中所有 ID 的总成本和失败行中的失败总成本 【参考方案1】:

我会试试这个(针对空值和空格更新):

SELECT 'Success', SUM(t2.Col2) FROM Table1 t1 JOIN Table2 t2 ON t1.Col1 = t2.Col1 WHERE t1.Col2 = 'Success' UNION ALL
SELECT 'Failure', SUM(t2.Col2) FROM Table1 t1 JOIN Table2 t2 ON t1.Col1 = t2.Col1 WHERE t1.Col2 = 'Failure' UNION ALL
SELECT 'NULL', SUM(t2.Col2) FROM Table1 t1 JOIN Table2 t2 ON t1.Col1 = t2.Col1 WHERE t1.Col2 IS NULLUNION ALL
SELECT 'EMPTY SPACE', SUM(t2.Col2) FROM Table1 t1 JOIN Table2 t2 ON t1.Col1 = t2.Col1 WHERE t1.Col2 = ' '

会给你两行你想要的结果。

UNION ALL 简单地连接两行或多行(具有相同的列); ALL 告诉忽略重复项(这不是问题,实际上可以提高性能) SUM 当然是对列中的所有单元格求和 JOINwill "merge" your tables

JOIN 子句用于根据它们之间的相关列组合来自两个或多个表的行。

【讨论】:

是的,我尝试并得到 TYPE 错误,它是 :: Msg 245, Level 16, State 1, Line 37 将 varchar 值“成功”转换为数据类型 int 时转换失败。 嗯,是的,'Success' 是一个字符串(我猜是 varchar 或 nvarchar,这是你的“结果”列的类型),你不能在总和中使用它。对吗? 但我的要求是不要转换任何东西,只需添加符合 ROWID 的所有金额,这符合 Success 和一些 ROWID 符合 FAILURES。因此,我的表 1 在一列中只有 ROWID,而在另一列中只有结果(成功,失败),而我的表二在一列中有 ROWID,在另一列中有金额。我正在尝试基于 ROWID 形成连接查询,因为这是两个表之间的公共列,然后返回两列,一列用于总成功 = 总金额,另一列用于总失败 = 总金额 我编辑了我的答案。我明白你需要什么了吗?有用吗? 嘿 FracescoB - 你是个了不起的人。做得好!。是的,它有效。我最后的澄清是......我添加了另一个选择来查找第三个值,该值与 Success&Failures 一起显示为 NULL。但这并没有总结金额,只是给了我 NULL 值。那么,如何扩展您的查询以查找其他值,例如 'NULL'、'EMPTY SPACE' ?

以上是关于SQL Server:查询以获取表 1 的 Col1 中的值的总和,以获取表 2 的 Col2 中的条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2008 中通过单个查询更新两个表 [重复]

如何编写一个查询以从SQL Server中包含类似名称的多个表中获取数据

SQL Server:SELECT 查询以获取 DISTINCT 和 MAX 显示顺序值

获取输出的 SQL 查询

如何优化 SQL 查询以减少运行时间?

SQL Server 中具有动态列的数据透视表