Solved

Filtering Results from a Concatenated List

Posted on 2014-03-05
5
243 Views
Last Modified: 2014-03-06
Hello :)

I have managed to pivot some data from a veritcal layout to a horizontal  concatenated view.  However, I'm having a bit of a struggle to figure out a simple and quick way to filter the results without having to put it in excel and look at each record.

Basically, we have a table with an issue_num field and then two other fields - one called column_name and one called column_value

The data looked like this:

12345.......Value_A.......0
12345.......Value_B.......1
12345.......Value_C.......0
45678.......Value_A.......-
45678.......Value_B.......-
98765.......Value_A.......0
98765.......Value_B.......0
98765.......Value_C.......0
98765.......Value_D.......0

And it goes on and on of course...the number of variations in the column_name field I think can go up to like "Value_Z" and its totally varied how many values 1 issue_num may have.

So, what I did was create a nice query that puts it vertically for me like so:

12345......0,1,0
45678......-,-
98765......0,0,0,0

Now, the thing I'm struggling with since my concatenated field will never have the same number of values and could look something like this in addition to what I have shown: 0,4,2,1,-,-,-,1,2,3,4 ... and I need to pull out all issue numbers that have either a 0 across the board or a "-" across the board.  

So, in my example, I would want my query to return 45678 and 98765 because those do not have any valid values in each column value.

I tried messing with a complicated where clause but it just got ugly and I even pasted the result set into excel and thought about manually looking at each one but I know there has to be a programmatic way for me to do this, I'm just having a brain fart.

Any help is appreciated. :)
Please let me know if you need more information.
0
Comment
Question by:Roxanne25
  • 3
  • 2
5 Comments
 
LVL 11

Expert Comment

by:John_Vidmar
ID: 39909425
There are more query-techniques available if your data is normalized, combining multiple rows into a single field will not help you.

Assuming column_name (has a values like 12345, 45678) and column_value (has character values like 0, 1, -) :
select	column_name
from	#sometable
group
by	column_name
having	COUNT(*) = SUM(case when column_value in ('0','-') then 1 else 0 end)

Open in new window

0
 

Author Comment

by:Roxanne25
ID: 39909738
Hi thanks, the combining of the rows is exactly what I "want" it to do ... I just need to find instances where the values are all 0's or all -'s ... I tried your query but it did not return any data.

The original data set looks exactly as I have it  like this:

issue_num....column_name....column_value
12345.......Value_A.......0
12345.......Value_B.......1
12345.......Value_C.......0
45678.......Value_A.......-
45678.......Value_B.......-
98765.......Value_A.......0
98765.......Value_B.......0
98765.......Value_C.......0
98765.......Value_D.......0

and its the column_value and the issue_num that I care about not the column_name.  The part I can't get my where clause around is that the column_name field could have one value per issue_num or 20 ... if it was a consistent range IE A-E, then I could do it no problem.

So, of the original data listing that I have above... what I'm after is only issue_num 45678 and issue_num 98765 because they have 0's and -'s for every instance of column_name.  12345 does not fit into the criteria because one of the values is a 1.

If there was another way to get what I need from the original data without having to concatenate all the values then that would work too... but I'm trying not to turn this into a giant stored procedure just to get at some informational data.
0
 
LVL 11

Accepted Solution

by:
John_Vidmar earned 500 total points
ID: 39909848
You have some technique to take that ugly data (which has all those periods) and parse out the values you want, and group each issue_num into one record with column_name containing its related comma-delimited list of values.

I suggest you normalize your data (first normal form, or 1NF) so each field (in this case, column_name) only contains a single value.  I used the wrong field name, but I qualified that in the assumptions.

Your data would then be in a table (I used #sometable) as follows:
      issue_num      column_name
      12345            0
      12345            1
      12345            0
      45678            -
      45678            -
      98765            0
      98765            0
      98765            0
      98765            0

So the following query, should display issue_num where all the column_name values are either 0 or dash:
select	issue_num
from	#sometable
group
by	issue_num
having	COUNT(*) = SUM(case when column_name in ('0','-') then 1 else 0 end)

Open in new window

0
 

Author Comment

by:Roxanne25
ID: 39909862
Well if it were possible for me to normalize the data I would... but I can't. :)
0
 

Author Comment

by:Roxanne25
ID: 39909899
However, I tweaked your query there a bit for the data as it is.... and I tip my hat off to you sir because you are a genius.... it works... and its so simple.  I kept looking at this like it was incredibly complicated and so it must require a complicated solution.  

THANK YOU VERY MUCH!
0

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

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

In this article I will describe the Backup & Restore method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
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…
Using examples as well as descriptions, and references to Books Online, show the documentation available for datatypes, explain the available data types and show how data can be passed into and out of variables.

832 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