Solved

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

Posted on 2011-03-01
8
587 Views
Last Modified: 2012-05-11
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
Comment
Question by:mjburgard
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 75

Assisted Solution

by:Aneesh Retnakaran
Aneesh Retnakaran earned 150 total points
ID: 35013262
AND ProductCode between 1 and 40
0
 
LVL 32

Accepted Solution

by:
Ephraim Wangoya earned 250 total points
ID: 35013437
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)

Open in new window

0
 
LVL 5

Expert Comment

by:Kelmen
ID: 35013736
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
Free eBook: Backup on AWS

Everything you need to know about backup and disaster recovery with AWS, for FREE!

 
LVL 45

Expert Comment

by:aikimark
ID: 35013978
@mjburgard

What kind of database is this?
0
 
LVL 4

Expert Comment

by:samijsr
ID: 35015796
having ProductCode between 1 and 40
0
 
LVL 1

Author Comment

by:mjburgard
ID: 35040035
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 41

Assisted Solution

by:Sharath
Sharath earned 100 total points
ID: 35040095
Add a WHERE clause.

WHERE ProductCode IS NOT NULL
0
 
LVL 1

Author Closing Comment

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

Featured Post

Ransomware: The New Cyber Threat & How to Stop It

This infographic explains ransomware, type of malware that blocks access to your files or your systems and holds them hostage until a ransom is paid. It also examines the different types of ransomware and explains what you can do to thwart this sinister online threat.  

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
JSON is being used more and more, besides XML, and you surely wanted to parse the data out into SQL instead of doing it in some Javascript. The below function in SQL Server can do the job for you, returning a quick table with the parsed data.
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question