Monday, 15 February 2010

sql - Result set in column not row -



sql - Result set in column not row -

i need minimum values 16 columns @ time.

i.e. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

minimum= 1

i need slid on 1 ever new set of 16 , minium values 1

i.e. 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17

minimum 2

there 2571 columns 11,000 rows.

so far getting rows from:

declare @start int =1 declare @end int=16 begin transaction select * (select row=row_number() on ( order column_name), column_name information_schema.columns table_name in ( '100', '200', '300', '400' ) , column_name not in ( 'time', 'scan' ))row row >= @start , row <= @end commit

this giving me first 16 columns in column. open , set returning results cursor can execute row row analysis.

something this, though if add together 1 row number each 1 want should move over.

declare @column01 nvarchar(50), @column02 nvarchar(50), @column03 nvarchar(50), @column04 nvarchar(50), @column05 nvarchar(50), @column06 nvarchar(50), @column07 nvarchar(50), @column08 nvarchar(50), @column09 nvarchar(50), @column10 nvarchar(50), @column11 nvarchar(50), @column12 nvarchar(50), @column13 nvarchar(50), @column14 nvarchar(50), @column15 nvarchar(50), @column16 nvarchar(50) declare @start int =1 declare @end int=16 declare db_cursor cursor select column_name (select row=row_number() on ( order column_name), column_name information_schema.columns table_name in ( '100', '200', '300', '400' ) , column_name not in ( 'time', 'scan' ))row row >= @start , row <= @end open db_cursor fetch next db_cursor @column01 ,@column02 while @@fetch_status = 0 begin --do work here print @column01 + ' ' + @column02 fetch next db_cursor @column01 , @column02 end close db_cursor deallocate db_cursor

i know can pivot work want since not need aggregate? suggestions?

you don't need dynamic sql. normalize info unpivot.

with t ( select row, scan, col, val mytable unpivot(val col in ([1],[2],[3],[4],...<snip>...,[2570],[2571]))p ) select row, scan, col range_start, col + 15 range_end, min_val t t1 cross apply ( select min(t2.val) min_val t row = t1.row , scan = t1.scan , col between t1.col , t1.col + 15 ) t2

sql sql-server cursor dynamic-sql

No comments:

Post a Comment