多个Between语句

11

我是一名学生开发者,目前正在学习SQL课程。我正在尝试从表中检索多个行组的总和。我对SQL开发非常陌生,对于以下情况我不太确定问题出在哪里。我有一个大表格,我想从中选择特定的行,然后添加余额列。

以下查询不会显示任何结果,我不太确定原因。我有一个猜测,即between语句每个表只能使用一次,但也许我错了?

Select Description, SUM(Balance) AS Total_Balance
FROM Chart_Of_Accounts
WHERE (Account BETWEEN ('400401') AND ('400407')) 
AND (Account BETWEEN ('440094') AND ('440100')) 
AND (Account BETWEEN ('450094') AND ('450100'))
GROUP BY Description, Balance 

2012年10月1日编辑 根据(Richard aka cyberkiwi)的要求

我所拥有的内容

Set 1
|Account        |Description         |Balance
|4004xx         |Red Wine            |$2361.23
|4004xx         |White Wine          |$3620.23
|4004xx         |Rice Wine           |$1223.23

Set 2
|Account        |Description         |Balance
|4400xx         |Red Wine            |$4361.23
|4400xx         |White Wine          |$3260.23
|4400xx         |Rice Wine           |$223.23

Set 3
|Account        |Description         |Balance
|4500xx         |Red Wine            |$1361.23
|4500xx         |White Wine          |$1620.23
|4500xx         |Rice Wine           |$1223.23

我想要实现的结果

Total
|Description         |Total_Balance
|Red Wine            |$8083.69
|White Wine          |$8500.69
|Rice Wine           |$2669.69

感谢您阅读我的帖子! 我也很愿意接受有关SQL开发的建议, 并且非常感激任何反馈。

3个回答

27

使用 OR 而不是 AND!
你的意思是,给我结果在 A 和 B 之间,或者 在 C 和 D 之间等。

  SELECT Description, SUM(Balance) AS Total_Balance
    FROM Chart_Of_Accounts
   WHERE (Account BETWEEN '400401' AND '400407') 
      OR (Account BETWEEN '440094' AND '440100') 
      OR (Account BETWEEN '450094' AND '450100')
GROUP BY Description
我去掉了多余的括号,但你甚至可以去掉剩下的括号,因为OR会在AND之后进行处理。参见:SQL Server运算符优先级

我理解你的意思,但我真正想做的是使用帐号号码在A-D、H-S和U-X之间进行合并(求和)这些记录(行)的余额。当使用OR时,由于其顺序出现,我只得到了A-D。感谢您的快速回答!对不起,我的措辞可能有些不规范,我还在学习中。 - Wylie Coyote SG.
1
你能否编辑问题并提供一些样本结果?你想按描述或账户分组吗?你想要3行,每个分组一个,A-d、H-S、U-X,这意味着按账户而不是描述进行分组? - RichardTheKiwi
当然可以!我很乐意为您编辑我的问题!在我查询的这个表中,我只有四列。账户(保存账号),描述(保存产品名称),简短描述(保存账户类型)和余额(保存货币价值)。我想做的是从这个表中获取几个账户,并将它们的余额相加。我试图使用分组函数将相同的产品分组在一起,因为每个位置的这些账户中都有相同的6种产品。 - Wylie Coyote SG.

2

如果你的名字以W开头,它可以在A-D和F-M和U-Z之间吗? 当然不行。

然而,它可以在A-D或F-M或U-Z之间。

账号号码也是一样。


0

我认为你的问题部分在于(除了RichardTheKiwi所指出的使用AND而不是OR之外),你正在同时按Description和Balance进行分组。由于你想要对每个Description的余额求和,因此你只应该按Description进行分组。如果你对每个唯一的Balance值以及聚合函数(SUM()、AVG()、STDEV()等)在其他字段上感兴趣,那么你会按Balance进行分组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接