Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple Between Statements

Tags:

sql

sum

between

I'm a student developer currently taking a SQL course. I'm currently trying to retrieve the sum of several groups of rows from a table. I'm very new to SQL development and I'm not too sure what the problem is in the following scenario. I have a large table of which I want to select specific rows from and then add the balance column.

The following will not display any data in the results and I'm not too sure why. I have a hunch that the between statement can only be used once per table but maybe I'm wrong?

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 

Edit 10.1.2012 As requested by (Richard aka cyberkiwi)

What I Have

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

Result I'm Trying to Achieve

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

thank you for reading my post! I am also open to any advice in SQL development and any feedback is greatly appreciated.

like image 457
Wylie Coyote SG. Avatar asked Oct 01 '12 01:10

Wylie Coyote SG.


1 Answers

Use ORs instead of ANDs!
What you mean to express is, give me results where it is between A and B, or it is between C and D etc.

  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

I dropped the extraneous brackets, but you could even drop the remaining ones becaues the ORs get processed after the ANDs. See: SQL Server Operator Precedence

like image 181
RichardTheKiwi Avatar answered Oct 17 '22 04:10

RichardTheKiwi