在日期转换时查询sql pivot

时间:2016-06-09 10:11:12

标签: sql oracle

我有一个名为LAB的表,它有这些重要的字段:

DATA,CODE,STRUTT。 DATA包含日期,代码字符串和strutt整数

我需要的是查询此表并返回类似的内容:

-----------------------
| DAYS | YEAR | YEAR2 |
-----------------------
|    |     STRUTT     |
-----------------------
|    |        |       |

他们建议我使用枢轴。但我不知道如何分组。 我的第一次尝试是:

SELECT * FROM
(
  SELECT STRUTT, CODe, DATA
  FROM LAB
  WHERE DATA  >= DATE '2016-05-01' AND DATA <= DATE '2016-05-31'
)
PIVOT 
(
  count(DISTINCT CODE)
  FOR STRUTT IN (21,22,23,24,25,26)
)

这是我使用Pivot的开始。但后来我试图更改for语句并放置:

FOR DATA IN ('2016-05-01','2016-05-21')

但这给了我错误。解决整个问题的一些想法?或者至少解决最后一个日期? 已解决但最终无需解决问题

2 个答案:

答案 0 :(得分:0)

看起来您正在使用Oracle。我可能会建议尝试:

FOR DATA IN (DATE '2016-05-01', DATE '2016-05-21')

否则,字符串值将被解释为字符串,而不是日期。

答案 1 :(得分:0)

我通过查看某处来解决问题...我仍然不知道我使用的是哪个版本的Oracle。顺便说一句,这对我有用:

select strutt
         , to_char(data,'dd-MON') AS dayMonth
         , count(DISTINCT (case extract(year from data) when 2015 then code end)) numutenze_2015
         , count(DISTINCT (case extract(year from data) when 2016 then code end)) numutenze_2016
from lab
where data >= DATE '2015-01-01' and data <= DATE '2016-06-08'
group by strutt, to_char(data,'dd-MON')
order by strutt, to_char(data,'dd-MON') asc

我唯一的问题是,我不知道如何订购日期......它从4月开始,然后是8月...... ecc