안녕하세요. 월별로 값을 나타내는 A테이블있고 계산 방법을 가지고 있는 B 테이블이 있습니다.
2개의 테이블을 조인해서 DETAIL에 있는 로직을 반영한 값을 계산할 수 있을까요? (VALUE 값)
주기적으로 계산 방식이 변경될 수 있어 계산 방법에 대한 맵핑 테이블을 가지고 관리할려고 합니다.
* 더 효율적인 Detail 데이터에 구성 방식이 있으면 변경 가능합니다.
DB는 오라클 입니다.
A테이블
YYYYMM | VV001 | VV002 | VV003 | VV004 | VV005 | VV006 | VV007 | VV008 | VV009 | VV010 |
202501 | 665 | 693 | 610 | 932 | 595 | 821 | 745 | 899 | 738 | 673 |
202502 | 520 | 856 | 976 | 831 | 862 | 593 | 593 | 647 | 892 | 534 |
202503 | 755 | 739 | 514 | 582 | 769 | 713 | 959 | 578 | 523 | 587 |
202504 | 646 | 579 | 806 | 638 | 863 | 893 | 559 | 954 | 855 | 857 |
202505 | 971 | 991 | 547 | 920 | 574 | 952 | 952 | 623 | 668 | 689 |
202506 | 530 | 760 | 844 | 685 | 600 | 930 | 528 | 715 | 886 | 918 |
202507 | 581 | 946 | 818 | 595 | 595 | 986 | 558 | 610 | 962 | 963 |
202508 | 959 | 921 | 809 | 818 | 555 | 838 | 615 | 821 | 506 | 558 |
202509 | 527 | 982 | 713 | 541 | 912 | 603 | 776 | 800 | 753 | 764 |
202510 | 723 | 676 | 668 | 610 | 896 | 827 | 648 | 986 | 559 | 704 |
202511 | 702 | 635 | 850 | 951 | 639 | 807 | 844 | 556 | 976 | 857 |
202512 | 649 | 729 | 783 | 833 | 977 | 770 | 939 | 522 | 771 | 599 |
B 테이블
YYYYMM | CATEGORY | DETAIL | VALUE |
202501 | Group1 | VV001 + VV003 | 1275 |
202503 | Group2 | VV002 + VV005 | 1508 |
202510 | Group3 | VV004 - VV010 | |
202512 | Group4 | VV003 - (VV005 + VV006 + VV007) |
답변 감사드립니다. 위에 내용대로 한다고 하면 이렇게도 가능 하다고 봐야될까요?
Table B
CATEGORY | DETAIL |
Group1 | VV001 + VV003 |
Group2 | VV002 + VV005 |
Group3 | VV004 - VV010 |
Group4 | VV003 - (VV005 + VV006 + VV007) |
Table A
YYYYMM | VV001 | VV002 | VV003 | VV004 | VV005 | VV006 | VV007 | VV008 | VV009 | VV010 | Group1 | Group2 | Group3 | Group4 |
202501 | 665 | 693 | 610 | 932 | 595 | 821 | 745 | 899 | 738 | 673 | 1275 | 1288 | 259 | -1551 |
202502 | 520 | 856 | 976 | 831 | 862 | 593 | 593 | 647 | 892 | 534 | 1496 | 1718 | 297 | -1072 |
202503 | 755 | 739 | 514 | 582 | 769 | 713 | 959 | 578 | 523 | 587 | 1269 | 1508 | -5 | -1927 |
202504 | 646 | 579 | 806 | 638 | 863 | 893 | 559 | 954 | 855 | 857 | 1452 | 1442 | -219 | -1509 |
202505 | 971 | 991 | 547 | 920 | 574 | 952 | 952 | 623 | 668 | 689 | 1518 | 1565 | 231 | -1931 |
202506 | 530 | 760 | 844 | 685 | 600 | 930 | 528 | 715 | 886 | 918 | 1374 | 1360 | -233 | -1214 |
202507 | 581 | 946 | 818 | 595 | 595 | 986 | 558 | 610 | 962 | 963 | 1399 | 1541 | -368 | -1321 |
202508 | 959 | 921 | 809 | 818 | 555 | 838 | 615 | 821 | 506 | 558 | 1768 | 1476 | 260 | -1199 |
202509 | 527 | 982 | 713 | 541 | 912 | 603 | 776 | 800 | 753 | 764 | 1240 | 1894 | -223 | -1578 |
202510 | 723 | 676 | 668 | 610 | 896 | 827 | 648 | 986 | 559 | 704 | 1391 | 1572 | -94 | -1703 |
202511 | 702 | 635 | 850 | 951 | 639 | 807 | 844 | 556 | 976 | 857 | 1552 | 1274 | 94 | -1440 |
202512 | 649 | 729 | 783 | 833 | 977 | 770 | 939 | 522 | 771 | 599 | 1432 | 1706 | 234 | -1903 |
Table B에 정보를 가지고 기존 Table A 필드에서 Group에 갯수만큼 필드를 추가로 만들고 싶습니다.
또 한가지 궁금한게 대용량에 데이터에 경우 이렇게 사용해도 괜찮을까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SELECT * FROM ( SELECT yyyymm , vv001, vv002, vv003, vv004, vv005, vv006, vv007, vv008, vv009, vv010 , category , TO_NUMBER( dbms_xmlgen.getxmltype( 'SELECT ' || b.detail || ' v FROM t_a WHERE yyyymm = ' '' || a.yyyymm || '' '' ).Extract( '//text()' ) ) v FROM t_a a , t_b b ) PIVOT ( MIN (v) FOR category IN ( 'Group1' Group1 , 'Group2' Group2 , 'Group3' Group3 , 'Group4' Group4 ) ) ; |