Solved

# SQL Where statment, AND x IN (a, b, c)

Posted on 2011-03-01
494 Views
So I'm guessing the solution to this is reasonably easy and I'm just missing something.  I have a SQL query set up to output some data in a table, and everything works fine.  I'm making another query that is similar except for one little difference.  The where statement in the first query looks like so:

WHERE
UpdateDate BETWEEN @StartDate AND @EndDate
AND LCCN IN (52015, 55215, 39010, 39100)
-- followed by
GROUP BY
CASE WHEN LCCN = 52015 THEN 'Item A'
WHEN LCCN = 55215 THEN 'Item B'
WHEN LCCN = 39010 THEN 'Item C'
WHEN LCCN = 39100 THEN 'Item D'
END,
YEAR(UpdateDate),
MONTH(UpdateDate),
DATENAME(mm,UpdateDate)

The second query change will be to use ProductCode instead of LCCN, but ProductCode would also need to pull multiple numbers per group.  So say the group by statement would look something like this (assuming this works)

GROUP BY
CASE WHEN ProductCode between 1 and 10 THEN 'Item A'
WHEN ProductCode between 11 and 20 THEN 'Item B'
WHEN ProductCode between 21 and 30 'Item C'
WHEN ProductCode between 31 and 40 THEN 'Item D'
END,
YEAR(UpdateDate),
MONTH(UpdateDate),
DATENAME(mm,UpdateDate)

(As I said, I'm not sure that would work, but thats not my concern right now).  The problem is I can't figure out how to do that in the Where statment.  Something like

AND ProductCode IN (1 to 10, 11 to 20, 21 to 30, 31 to 40)

but I can't figure out what the correct way to do that would be (or for that matter if it is possible).

Thanks for the help let me know if more information is needed (sorry typed this up in a hurry).
0
Question by:mjburgard

LVL 75

Assisted Solution

Aneesh Retnakaran earned 150 total points
AND ProductCode between 1 and 40
0

LVL 32

Accepted Solution

ewangoya earned 250 total points
Try

``````WHERE (UpdateDate BETWEEN @StartDate AND @EndDate)
AND (ProductCode BETWEEN 1 AND 40)
--for group by

GROUP BY
CASE WHEN ProductCode < 11 THEN 'Item A'
WHEN ProductCode < 21 THEN 'Item B'
WHEN ProductCode < 31 THEN 'Item C'
WHEN ProductCode < 41 THEN 'Item D'
END,
YEAR(UpdateDate),
MONTH(UpdateDate),
DATENAME(mm,UpdateDate)
``````
0

LVL 5

Expert Comment

select * from (
select * ...
,      CASE WHEN ProductCode between 1 and 10 THEN 'Item A'
WHEN ProductCode between 11 and 20 THEN 'Item B'
WHEN ProductCode between 21 and 30 'Item C'
WHEN ProductCode between 31 and 40 THEN 'Item D'
END
As PCode ...
Where ...
)
Group by  ... PCode ...
0

LVL 45

Expert Comment

@mjburgard

What kind of database is this?
0

LVL 4

Expert Comment

having ProductCode between 1 and 40
0

LVL 1

Author Comment

Ok that appears to be easier then I thought, didn't think about just calling all the product codes and letting the GROUP BY take care of it.

One more little question though, is there a way to not show any NULL's that show up?  Say if we changed things around so I was calling product code 1 through 50, but 35 through 40 wasn't in any of the groups.  Right now anything in there shows up as NULL, is there an easy way to not show that? Its not a huge deal, but would be nice for the event that this is changed around for additions to the database.
0

LVL 40

Assisted Solution

Sharath earned 100 total points

WHERE ProductCode IS NOT NULL
0

LVL 1

Author Closing Comment

First solution was correct, but second was more detailed and easier to follow, which is why it got more points.
0

## Featured Post

Everyone has problem when going to load data into Data warehouse (EDW). They all need to confirm that data quality is good but they don't no how to proceed. Microsoft has provided new task within SSIS 2008 called "Data Profiler Task". It solve th…
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Via a live example, show how to shrink a transaction log file down to a reasonable size.