Conditional Parameter in Where Clause

I'm trying to figure out a way to filter a dataset using a parameter only when the user enters a value for the parameter and to not apply the filter if the parameter is left blank (or null) by the user. I would like to do this within the WHERE clause of the SELECT statement to minimize the size of the dataset whenever possible. Is there such a thing as a default parameter value that equates to "any value"

Nothing I have tried works (but I'm new to SQL, Report Server and the Visual Basic Development Environment).

Thanks in advance,

Chris



Answer this question

Conditional Parameter in Where Clause

  • Patrick Altman

    Adam,

    Thanks! It's now working just the way I wanted it to!

    Chris Heitman


  • Aing_d

    By your response it seems like your parameter is a textbox the user types into, is that correct

    My prerred way is to present the user a list of options i.e. a dropdown. In that case you don't get a null checkbox. The options in the dropdown can either be typed in on the paramter screen or can come from a dataset. The SELECT statement I provided is meant as an example of query used to populate such a dataset i.e. it includes a NULL option.

    If you wish to use a textbox then you could alter your SQL query and rather than using ISNULL you could use an OR in your WHERE clause as follows

    WHERE LITEM.SIZE = @Input_Size
    OR @Input_Size = '' -- empty string

    If LITEM.SIZE and @Input_Size are integers then it gets a little more complicated. You'll need to experiment.



  • XTend

    Rather than leaving the parameter unselected, you need to add an option with a value of NULL and text that matches your scenario e.g. blank, "All", "N/A", "Unspecified" etc. To do this you'll need to modify the query for the paramter dataset to:

    SELECT id = NULL, name = 'All'
    UNION ALL
    SELECT id, name
    FROM param_table

    Then update your main query with the following WHERE clause

    WHERE id = ISNULL(@param, id)

    so when the null option is selected the WHERE clause equates to id=id which is always true and hence all rows are returned.

    Hope this helps.



  • igor_22

    Thanks Adam,

    I was not familiar with ISNULL. I got it to work sort of like I wanted it to by checking the "Allow Null Value" checkbox and making the default value NULL in the Report Parameters dialog box and then putting this in the WHERE clause:

    WHERE LITEM.SIZE = ISNULL(@Input_Size, LITEM.SIZE)

    However, I could not figure out where to put the following statement (everything I tried resulted in an error - but I'm probably missing something obvious):

    SELECT id = NULL, name = 'All'
    UNION ALL
    SELECT id, name
    FROM param_table

     ...and therefore, the user must uncheck the NULL checkbox in order to enter a filter value and it's not real obvious that when NULL is checked, that the filter is not applied.

    Thanks again for pointing me in the right direction!

    Chris


  • Conditional Parameter in Where Clause