Oracle конвертировать строки в столбцы - PullRequest
0 голосов
/ 28 января 2012

У меня есть следующие данные из моего запроса

**Date**    **HIGH**  **LOW**       **IMAGE**      **TYPE**
1/28/2012     69         42          1.jpg           SUN
1/29/2012     70         42          2.jpg           MSUN

Я хочу преобразовать этот вывод в

**1/28/2012**       **1/29/2012**
1.jpg                    2.jpg    
Sun                       MSUN
69                         72  
42                         42

Вот мой запрос

SELECT 
   W_DATE,HIGH, LOW, 
   W_TYPE, IMAGE
FROM WEATHER
ORDER BY W_DATE ASC

ИТакже у меня есть несколько дат в строках, я хочу отобразить только 4 даты, и они должны измениться, когда системная дата изменяется

1 Ответ

0 голосов
/ 28 января 2012

О всех возможностях перехода от строк к столбцам в Oracle можно прочитать здесь:

http://www.dba -oracle.com / t_converting_rows_columns.htm

Я не вижу прямого решения для этого с точки зрения базы данных - предложил бы выполнить форматирование на стороне приложения, в противном случае это могло бы выглядеть таким же неудачным:

SELECT
   to_char(w1.w_Date,'MM/DD/YYYY'), to_char(w2.w_Date,'MM/DD/YYYY'), 
   to_char(w3.w_Date,'MM/DD/YYYY'), to_char(w4.w_Date,'MM/DD/YYYY')
FROM 
 (select * from weather where w_date = trunc(sysdate)) w1,
 (select * from weather where w_date = trunc(sysdate) + 1) w2,
 (select * from weather where w_date = trunc(sysdate) + 2) w3,
 (select * from weather where w_date = trunc(sysdate) + 3) w4
UNION ALL
SELECT
   w1.image,  w2.image, w3.image , w4.image
FROM 
 (select * from weather where w_date = trunc(sysdate)) w1,
 (select * from weather where w_date = trunc(sysdate) + 1) w2,
 (select * from weather where w_date = trunc(sysdate) + 2) w3,
 (select * from weather where w_date = trunc(sysdate) + 3) w4
UNION ALL
SELECT
   w1.w_type,  w2.w_type, w3.w_type , w4.w_type
FROM 
 (select * from weather where w_date = trunc(sysdate)) w1,
 (select * from weather where w_date = trunc(sysdate) + 1) w2,
 (select * from weather where w_date = trunc(sysdate) + 2) w3,
 (select * from weather where w_date = trunc(sysdate) + 3) w4
UNION ALL
SELECT
   to_char(w1.high),  to_char(w2.high), to_char(w3.high) , to_char(w4.high)
FROM 
 (select * from weather where w_date = trunc(sysdate)) w1,
 (select * from weather where w_date = trunc(sysdate) + 1) w2,
 (select * from weather where w_date = trunc(sysdate) + 2) w3,
 (select * from weather where w_date = trunc(sysdate) + 3) w4
UNION ALL
SELECT
   to_char(w1.low),  to_char(w2.low), to_char(w3.low) , to_char(w4.low)
FROM 
 (select * from weather where w_date = trunc(sysdate)) w1,
 (select * from weather where w_date = trunc(sysdate) + 1) w2,
 (select * from weather where w_date = trunc(sysdate) + 2) w3,
 (select * from weather where w_date = trunc(sysdate) + 3) w4;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...