2012-02-05 128 views
0

下面是表(新用户,无法张贴图片还):需要帮助从Excel数组公式将SQL语句组合

screenshot

我一直使用的Excel,但我由于数据集较大,因此切换到SQL。为了在Excel中填充CELL G2,我会使用类似这样的东西:

=SUM((A2:A8=E2)*(B2:B8)) 

在Excel for Cell G2中给出了一个值141。

我想出了如何让这个工作在SQL中,但我不完全明白为什么这会起作用。以下是我在SQL中使用的内容:

SET Table2.total_units_purchased = Table1.some_number 
FROM Table2 INNER JOIN 
(
    SELECT Table1.item 
    , SUM(Table1.units_purchased) AS some_number 
    FROM Table1 
    GROUP BY Table1.item 
) Table1 
ON Table2.item = Table1.item 

在some_number之前是否需要“AS”?即使省略“AS”,这仍然有效。

我在这里错过了什么吗?最后一行代码中的表的顺序是否重要?

感谢您的任何帮助。

+0

作为这种情况下的AS是一个别名,虽然不错的形式,它不是必需的。 ON子句的顺序无关紧要。 – xQbert 2012-02-05 22:15:53

+0

我对“AS”有点困惑,因为我最初用它来标记查询结果中的一列。我不知道它可以用来分配这样的值。 – eek142 2012-02-05 22:21:10

+1

您的查询完好无损。首先,对购买的单位进行总结(运行内部查询以查看其输出),然后将其视为派生表(带有别名“Table1”)并加入它以执行更新。 – ErikE 2012-02-05 23:25:05

回答

1

将'AS'关键字用作别名是可选的,这就是为什么当您省略'AS'时,您的查询仍然有效。其次,最后一行代码中的表的顺序在这种情况下并不重要。如果您的代码是ON Table1.item = Table2.item,查询将以相同的方式工作。请注意,如果您使用左外连接或右外连接,则表格顺序很重要。

在您的SQL代码中,您正在为该项目选择'item'和'购买的单位总和',然后将这些数据放到另一个表中,并重新命名为Table1。

然后,您将加入两个表格Table2和新的Table1,其中的项目字段具有相同的值。

最后,您选择'购买的单位总和'字段并将其分配到Table2的total_units_purchased字段。

你可以写下你的SQL查询,如下所示,它与你的Excel函数做同样的事情。

select sum(table1.units_purchased) 
into table2.total_units_purchased 
from table1, table2 
where Table2.item = Table1.item 
+0

当我尝试运行此操作时,出现“关键字附近的语法错误”选择'“错误。这似乎比我所做的更简单的解决方案。我不是100%确定任何一种解决方案现在正在工作......需要依然围绕着SQL语言。 – eek142 2012-02-05 22:59:34

+0

上面的查询应该工作正常,没有任何错误。你指的是哪个数据库?甲骨文,MySQL,..? – 2012-02-06 07:25:08

+0

SQL Server 2008 – eek142 2012-02-06 19:13:57