tags:

views:

17

answers:

1

I have two tables, table1 ( Id, date, info1) table2 ( Id, date, nvarchar(50) Key, nvarchar(50) Value)

I would like to join these tables and obtain rows where each value in the Key column is a new column, and the values in the value table are the data in the rows.

Example:

table1 row:

1, 2010-01-01, 234

table2 row:

1, 2010-01-01, 'TimeToProcess', '15'
1, 2010-01-01, 'ProcessingStatus', 'Complete'

The result desired is a row like:

1, 2010-01-01, 234, '15', 'Complete'

Where the column headers are (Id, date, info1, TimeToProcess, ProcessingStatus)

This transposition looks like it works similarly to PIVOT but I could not get it to work -- I suspect -- due to the nvarchar(50) type of the Key, Value columns and the fact that I am forced to use an aggregate function when in fact I do not need it.

I could use inner joins to achieve this but the only way I know how to do it would take 1 inner join per Key which in my case amounts to 6 inner joins as that's how many metrics I have.

How can I do this?

A: 

You're on the right track with PIVOT. You can PIVOT on a string value. Use the MIN or MAX aggregate function.

Brad
Thanks, I got it. I had a small problem when writing the FOR .. IN () statement since I enumerated the string values ('value1', 'value2', etc ) and this didn't work. The moment I took the quotation marks out VOILA! Although I don't understand why.
Rire1979
I use brackets to fully qualify what is going to become a column name in my for statements: `FOR <metric> IN ([ValueThatWillBecomeAColumnName])`
Brad