Search code examples
sqlreportingservices-2005

Find what letters are in a group of records in either SQL or SSRS


I have the following data (I have a lot more rows this is just an example):

VALUE   Location             FLEET    REGION
P       Pocatello, ID        104       232
B       Pocatello, ID        104       232
B       Spokane, WA          107        232
B       Spokane, WA          107       232

In either reporting services or MSSQL I need to group by fleet. Afer it is grouped I want it to see what values each group contains.

If the group contains values P and B then its Production If the group contains B only then it is Reporting If the group contains P then its Productivity

What I want from this example is the following rows to be returned in the end.

VALUE         LOCATION           FLEET    REGION
Production     Pocatello,ID       104       232
Reporting      Spokane, WAS       107       232

Right now the SQL query reports the data at the top of my quesiton. I need to either do the grouping and calculation is MSSQL or SSRS either one will work but how do I go about doing it to get the data listed like I have right above.

Thanks!


Solution

  • You could group on the other columns, and check for the presence if P or B in a case statement:

    declare @t table (value char(1), Location varchar(50), fleet int, region int)
    
    insert @t values
        ('P',       'Pocatello, ID',        104,       232),
        ('B',       'Pocatello, ID',        104,       232),
        ('B',       'Spokane, WA',          107,       232),
        ('B',       'Spokane, WA',          107,       232);
    
    select  case 
                when max(case when value = 'P' then 1 end) = 1 
                     and max(case when value = 'B' then 1 end) = 1 then 'Production' 
                when max(case when value = 'P' then 1 end) = 1 then 'Productivity' 
                when max(case when value = 'B' then 1 end) = 1 then 'Reporting' 
            end
    ,       location   
    ,       fleet
    ,       region
    from    @t
    group by
            location   
    ,       fleet
    ,       region
    

    This prints:

    (No column name)    location        fleet   region
    Production          Pocatello, ID   104     232
    Reporting           Spokane, WA     107     232