기억/Database

[Oracle] 세로의 데이터를 가로로 나타내기

Shift Key 2021. 5. 26. 09:47
728x90
반응형

DB를 사용하다보면 Grid에 바인딩 해야하는 경우가 많다.

하지만 Table을 조회해보면 데이터는 Row기반으로 쭉 나열되있어서 가시성이 떨어진다.
그러므로 우린 데이터를 가로로 보기좋게 바꿔야하는 경우가 자주 발생한다.

 

아래의 사이트는 DB없이도 웹에서 쿼리를 작성하고 결과를 볼 수 있다.

http://sqlfiddle.com/

 

 

작성한 쿼리는 아래의 주소에 있다.

http://sqlfiddle.com/#!4/2b6502/2

 

SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.

Query Panel Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...). Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.

sqlfiddle.com

 

위의 사이트에 쿼리를 볼 수 없는 경우 아래에 스크린샷과, 텍스트를 참조해도 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
--CREATE TABLE
CREATE TABLE T_TEST(        
SEQ        INT,
SELL_DATE VARCHAR(10), --날짜
FRUIT_NAME    VARCHAR(50), --과일 이름
FRUIT_QTY        NUMBER --판매 
);
 
--INSERT TEST DATA
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-20','Apple',100);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-21','Banana',30);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-21','Apple',200);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-21','Cherry',1500);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-22','Banana',500);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-22','Durian',10);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-22','Pineapple',2000);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-23','Mango',100);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-23','Apple',50);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-23','Cherry',20);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-24','Pineapple',600);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-24','Banana',1000);
INSERT INTO T_TEST
(SEQ,SELL_DATE,FRUIT_NAME,FRUIT_QTY)
VALUES
((SELECT NVL(MAX(SEQ),0)+1 FROM T_TEST),'2021-05-24','Durian',5);
 
 
--SELECT QUERY1 (기초 데이터)
SELECT * FROM T_TEST;
 
--SELECT QUERY2 (결과 데이터)
SELECT R.FRUIT_NAME
  , SUM(D20) AS "20"
  , SUM(D21) AS "21"
  , SUM(D22) AS "22"
  , SUM(D23) AS "23"
  , SUM(D24) AS "24"
FROM (
  SELECT FRUIT_NAME
    ,CASE WHEN SUBSTR(SELL_DATE,9= 20 THEN FRUIT_QTY ELSE 0 END AS D20
    ,CASE WHEN SUBSTR(SELL_DATE,9= 21 THEN FRUIT_QTY ELSE 0 END AS D21
    ,CASE WHEN SUBSTR(SELL_DATE,9= 22 THEN FRUIT_QTY ELSE 0 END AS D22
    ,CASE WHEN SUBSTR(SELL_DATE,9= 23 THEN FRUIT_QTY ELSE 0 END AS D23
    ,CASE WHEN SUBSTR(SELL_DATE,9= 24 THEN FRUIT_QTY ELSE 0 END AS D24 
  FROM T_TEST
)R
GROUP BY R.FRUIT_NAME
ORDER BY R.FRUIT_NAME;
 
 
cs

왼) 기본 데이터  오) 결과 데이터

 

-20,000-

728x90
반응형

'기억 > Database' 카테고리의 다른 글

[ORACLE]두 날짜 사이의 날짜 받아오기 + 일-월 포맷  (0) 2020.01.28