我是一名正在修读SQL课程的学生。我目前正在尝试从表中检索几组行的总和。我是SQL开发的新手,我不太清楚以下场景中的问题是什么。我有一个大表,我想从中选择特定行,然后添加余额列。
以下内容不会在结果中显示任何数据,我不太清楚为什么。我有一种预感,即每个表只能使用一次语句,但也许我错了吗?
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
编辑10.1.2012 按照(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开发中的任何建议持开放态度,非常感谢任何反馈。
答案 0 :(得分:13)
使用OR代替AND!
你要表达的是,给我结果在A和B之间,or
它在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
我丢弃了无关的括号,但是你甚至可以删除其余的括号,因为在AND之后OR被处理了。请参阅:SQL Server Operator Precedence
答案 1 :(得分:1)
如果你的名字以W开头,你能否在A-D 和 F-M 和 U-Z之间写信?当然不是。
但是,它可以介于A-D 或 F-M 或 U-Z之间。
同样适用于帐号。
答案 2 :(得分:0)
我认为你问题的一部分(除了使用AND应该是OR,正如RichardTheKiwi如此友好地指出的那样)是你在描述和平衡上进行分组。您应该只按描述进行分组,因为您试图对每个描述的余额求和。如果您对Balance的每个唯一值以及在每个唯一余额的其他字段上的聚合函数(SUM(),AVG(),STDEV(),...)感兴趣,则可以按余额分组。