Filtering query using WHERE + CASE

  • Hi SQL Folk,

    I wanted to get some feedback on how I am using a CASE statement within a WHERE clause to filter data:

    CREATE PROCEDURE dbo.GetSomeStuff

    @filter1 varchar(100) = '',

    @filter2 varchar(100) = ''

    AS

    BEGIN

    SELECT

    col1,

    col2,

    col3,

    COUNT(*) as [result]

    FROM

    table1 t1

    WHERE

    CASE WHEN @filter1 != '' THEN t1.Col1 ELSE @filter1 = @filter1 AND

    CASE WHEN @filter1 != '' THEN t1.Col2 ELSE @filter2 = @filter2

    GROUP BY

    col1, col2, col3

    END

    What I want, is to be able to pass in a single value to filter the table, or if I pass in (at the moment a blank) for no filter to be applied to the table.

    Is this a good way to accomplish that, or is there a better way? Also, down the line I'm probably going to want to have multiple filter items for a single filter, what would be the best way to implement that?

    Thanks,

    Ken

  • Sean Lange had this to say while the forum didn't allow him to reply:

    ...you should check out this article. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/

    There are some serious performance issues for this type of query if you don't handle it correctly and Gail does an excellent job explaining how to deal with this.

    -----

    Thanks Sean, I'll check it out.

  • CELKO (8/22/2014)


    Did you know that SQL uses “<>” and not “!=” ?

    T-SQL does allow the use of != as well as <> so I don't think it's a big deal that on a forum dedicated to MS SQL Server a poster uses T-SQL syntax.

  • That's like saying you shouldn't write "colour" and should write "color" just because someone said so.

    Luis C.
    General Disclaimer:
    Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

    How to post data/code on a forum to get the best help: Option 1 / Option 2
  • Luis Cazares (8/22/2014)


    That's like saying you shouldn't write "colour" and should write "color" just because someone said so.

    Got any left handed spoons?

  • kzhen (8/22/2014)


    Sean Lange had this to say while the forum didn't allow him to reply:

    ...you should check out this article. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/

    There are some serious performance issues for this type of query if you don't handle it correctly and Gail does an excellent job explaining how to deal with this.

    -----

    Thanks Sean, I'll check it out.

    For an in-depth example along those lines:

    How to Design, Build and Test a Dynamic Search Stored Procedure [/url]


    My mantra: No loops! No CURSORs! No RBAR! Hoo-uh![/I]

    My thought question: Have you ever been told that your query runs too fast?

    My advice:
    INDEXing a poor-performing query is like putting sugar on cat food. Yeah, it probably tastes better but are you sure you want to eat it?
    The path of least resistance can be a slippery slope. Take care that fixing your fixes of fixes doesn't snowball and end up costing you more than fixing the root cause would have in the first place.

    Need to UNPIVOT? Why not CROSS APPLY VALUES instead?[/url]
    Since random numbers are too important to be left to chance, let's generate some![/url]
    Learn to understand recursive CTEs by example.[/url]
    [url url=http://www.sqlservercentral.com/articles/St

Viewing 6 posts - 1 through 5 (of 5 total)

You must be logged in to reply to this topic. Login to reply