Oracle query - row split to multiple rows

SELECT * FROM table1;

   MID	TSAG_U	    TSAG_A	   URD	ARD
1	1	2018040207	2018040207	0	81
2	1	2018040208	2018040208	0	191
3	1	2018040209	2018040209	0	702
4	1	2018040210	2018040210	0	382
5	1	2018040211	2018040211	0	649
6	1	2018040211	2018040212	67	13
7	1	2018040212	2018040212	0	89
8	1	2018040213	2018040213	0	270
9	1	2018040213	2018040214	7	101
10	1	2018040214	2018040214	0	395
11	1	2018040215	2018040215	0	531
12	1	2018040216	2018040216	0	358
13	1	2018040217	2018040217	0	761
14	1	2018040218	2018040218	0	100
15	1	2018040218	2018040219	43	36
16	1	2018040219	2018040219	0	886
17	1	2018040220	2018040220	0	1137
18	1	2018040221	2018040221	0	455

энийг задлаад, mid, tsag, niit - гэсэн 3 баганатай болгоно. цаг баганаруу tsag_u, tsag_a - ийн утга орно. нийт гэсэн баганаруу (tsag_u - urd, tsag_a - ard - баганууд тус тус харгалзаж байгаа) urd, ard - ын нийлбэр орно.

   	MID	TSAG	NIIT
1	1	2018040207	81
2	1	2018040208	191
3	1	2018040209	702
4	1	2018040210	382
5	1	2018040211	649+67
7	1	2018040212	13+89
8	1	2018040213	270+7
9	1	2018040214	101+395
10	1	2018040215	531
11	1	2018040216	358
12	1	2018040217	761
13	1	2018040218	100+43
14	1	2018040219	36+886
15	1	2018040220	1137
16	1	2018040221	455

google - ээр хайгаад яг миний хүссэн юм олддоггүй ээ. үүнийг яаж хийх вэ? туслаарай хүмүүсээ!

SELECT 
    MID, DECODE(SEQ, 1, TSAG_A, TSAG_U) TSAG, SUM(DECODE(SEQ, 1, ARD, URD)) NIIT  
FROM 
	(SELECT * FROM TABLE1), 
	(SELECT ROWNUM SEQ FROM DUAL CONNECT BY LEVEL <= 2)
WHERE 
	(URD > 0 OR SEQ = 1) 
GROUP BY  
	MID, DECODE(SEQ, 1, TSAG_A, TSAG_U)
ORDER BY 
	MID, DECODE(SEQ, 1, TSAG_A, TSAG_U);
  • daraa hund hereg bolvol …
1 Like