sql - Convert column name to time -


there table table stores values various intervals of time in given day. day can divided in 24 intervals of hour each or 96 intervals of 15 mins duration each. table contains following columns

date intervalcount int001 int002 . . int096 

i need display values in table in following format based on intervalcount value time calculated , associated value displayed

sample output

date        time             intervalcount  value 2013-04-11  00:00:00.0000000        96      23.43 2013-04-11  00:15:00.0000000        96      26.91 2013-04-11  00:30:00.0000000        96      28.1999999999 2013-04-11  00:45:00.0000000        96      28.77 2013-04-23  00:00:00.0000000        24      18.3099999999 2013-04-23  01:00:00.0000000        24      20.94 

code

select   [date],         (case          when [intervalcount]=96 cast(dateadd(minute,cast(substring([interval],4,3) int)*15, [date]) time)         when [intervalcount]=24 cast(dateadd(hour,cast(substring([interval],4,3) int), [date]) time)         end) [time],         [intervalcount], --24/96          [value]          ( select [date],             [intervalcount], --24/96              [int001], [int002], [int003], [int004], [int005], [int006], [int007], [int008],              [int009], [int010], [int011], [int012], [int013], [int014], [int015], [int016],             [int017], [int018], [int019], [int020], [int021], [int022], [int023], [int024],             [int025], [int026], [int027], [int028], [int029], [int030], [int031], [int032],             [int033], [int034], [int035], [int036], [int037], [int038], [int039], [int040],              [int041], [int042], [int043], [int044], [int045], [int046], [int047], [int048],             [int049], [int050], [int051], [int052], [int053], [int054], [int055], [int056],             [int057], [int058], [int059], [int060], [int061], [int062], [int063], [int064],             [int065], [int066], [int067], [int068], [int069], [int070], [int071], [int072],              [int073], [int074], [int075], [int076], [int077], [int078], [int079], [int080],             [int081], [int082], [int083], [int084], [int085], [int086], [int087], [int088],              [int089], [int090], [int091], [int092], [int093], [int094], [int095], [int096]                       [table] ) [source]         unpivot ([value] [interval] in         ([int001], [int002], [int003], [int004], [int005], [int006], [int007], [int008],          [int009], [int010], [int011], [int012], [int013], [int014], [int015], [int016],         [int017], [int018], [int019], [int020], [int021], [int022], [int023], [int024],         [int025], [int026], [int027], [int028], [int029], [int030], [int031], [int032],         [int033], [int034], [int035], [int036], [int037], [int038], [int039], [int040],          [int041], [int042], [int043], [int044], [int045], [int046], [int047], [int048],         [int049], [int050], [int051], [int052], [int053], [int054], [int055], [int056],         [int057], [int058], [int059], [int060], [int061], [int062], [int063], [int064],         [int065], [int066], [int067], [int068], [int069], [int070], [int071], [int072],          [int073], [int074], [int075], [int076], [int077], [int078], [int079], [int080],         [int081], [int082], [int083], [int084], [int085], [int086], [int087], [int088],          [int089], [int090], [int091], [int092], [int093], [int094], [int095], [int096]) ) [unpivot] 

i have achieved using unpivot , displaying time use cast along substring. there better way of doing this? part convert intervals time.

edit table design can't changed

is there better way of doing this?

depends on mean better. instance, following expression time calculation "better" in terms of amount of code:

dateadd(   minute,   cast(substring([interval],4,3) int) * 1440 / intervalcount,   cast('00:00' time) ) [time] 

you might find more scalable (in fact, actually scalable): if needed add support for, say, half-hour intervals, need start using intervalcount = 48 data.

at same time, intent may conveyed in less clear way above code. therefore, if 24 , 96 possible values can ever need intervalcount, not need more flexibility you've got part of code.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

css - Firefox for ubuntu renders wrong colors -