1

一位用户给了我一张如下所示的表格。

Name   HH08   HH09   HH10   HH11   HH12   HH13
Bob      2      3      4      2      7      1
Steve    2      9      3      2      2      5
Mike     2      2      2      2      3      2
Pat      1      0      2      0      0      0

我需要一些 sql 来根据名称选择行,并在运行查询时根据 sysdate 的当前小时选择列。

如果是上午 9 点 27 分,用户是 Steve,则 sql 需要选择 9 值。

是否有任何简单的 sql 可以做到这一点,或者我是否需要重组用户给我的表,这将是偶尔的。

提前致谢。

4

3 回答 3

4

尝试:

select case to_char(sysdate,'hh24')
           when '08' then hh08
           when '09' then hh09
           when '10' then hh10
           when '11' then hh11
           when '12' then hh12
           when '13' then hh13
       end OutputValue
from TableName
WHERE Name = 'Steve'
于 2013-07-16T15:37:46.097 回答
1
SELECT 'HH'+convert(char(2),DATEPART(hour,getdate()))
FROM TableName
WHERE Name = 'Steve'

试试这个

于 2013-07-16T15:29:22.177 回答
1
with t as (
  select 'Bob' name, 2 hh08, 3 hh09, 4 hh10, 2 hh11, 7 hh12, 1 hh13 from dual union all
  select 'Steve',    2,      9,      3,      2,      2,      5 from dual union all
  select 'Mike',     2,      2,      2,      2,      3,      2 from dual union all
  select 'Pat',      1,      0,      2,      0,      0,      0 from dual 
)
--/\-- Data sample --/\--
select value from t
  unpivot(value for hr in (hh08 as '08', hh09 as '09', hh10 as '10', hh11 as '11', hh12 as '12', hh13 as '13') )
 where hr = to_char(sysdate, 'HH24')
   and name = 'Pat';
于 2013-07-16T18:16:56.563 回答