views:

275

answers:

1

Hi all,

I have a table (table variable in-fact) that holds several thousand (50k approx) rows of the form:

group (int)  isok (bit)    x    y
20           0             1    1
20           1             2    1
20           1             3    1
20           0             1    2
20           0             2    1
21           1             1    1
21           0             2    1
21           1             3    1
21           0             1    2
21           1             2    2

And to pull this back to the client is a fairly hefty task (especially since isok is a bit). What I would like to do is transform this into the form:

group        mask
20           01100
21           10101

And maybe go even a step further by encoding this into a long etc.

NOTE: The way in which the data is stored currently cannot be changed.

Is something like this possible in SQL Server 2005, and if possible even 2000 (quite important)?

EDIT: I forgot to make it clear that the original table is already in an implicit ordering that needs to be maintained, there isnt one column that acts as a linear sequence, but rather the ordering is based on two other columns (integers) as above (x & y)

+2  A: 

You can treat the bit as a string ('0', '1') and deploy one of the many string aggregate concatenation methods described here: http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

Remus Rusanu
Will this work even if there are thousands of rows for each group? Thanks.
Kieran Benton
Yes, that's the advantage. If there would have been a max of 64 per group you could had use a bigint bitwise operations, but anything more and you must use a string or varbinary. But you need an order column.
Remus Rusanu