Làm thế nào để có được dữ liệu phân cấp từ hai bảng trong orory?


8

Tôi có hai bảng table1 và table2, tôi cần đầu ra phân cấp bằng cách nối cả hai bảng.

Bảng 1 chứa ba loại CAT1, CAT2 và CAT3 với một khóa ngoại, tức là IFID, là khóa chính của bảng khác, bảng 2 chứa thêm một cột egVAL.

TABLE 1
-----------------
CAT1        CAT2        CAT3        F_ID
A           a           aa          1
A           a           ab          2
A           b           ba          3
A           b           bb          4
B           c           ca          5
B           c           cb          6
B           d           da          7


TABLE 2
-------------------
F_ID    VAL
1       4
2       6
3       4
4       1
5       6
6       6
7       9

Bây giờ tôi cần dữ liệu ở định dạng dưới đây, trong đó mỗi danh mục và danh mục con chứa tổng số VAL.

Need Data in below Format from the above table
----------------------------------------------
A       -       -       15
A       a       -       10
A       a       aa      4
A       a       ab      6
A       b       -       5
A       b       ba      4
A       b       bb      1
B       -       -       21
B       c       -       12  
B       c       ca      6
B       c       cb      6
B       d       -       9
B       da      da      9

Làm ơn giúp tôi.

Câu trả lời:


6

Sử dụng bộ nhóm . Bạn có thể thử nó ở đây .

select cat1, cat2, cat3, sum(val) as val
  from t1 join t2 on t1.f_id = t2.f_id
group by grouping sets ((cat1),(cat1, cat2),(cat1, cat2, cat3))
order by cat1, cat2 nulls first, cat3 nulls first

ĐẦU RA

cat1 cat2 cat3 val
A           15
A   a       10
A   a   aa  4
A   a   ab  6
A   b       5
A   b   ba  4
A   b   bb  1
B           21
B   c       12
B   c   ca  6
B   c   cb  6
B   d       9
B   d   da  9

Nếu bạn thích gạch dưới hơn nullsử dụngNVL

select cat1, nvl(cat2,'_') as cat2, nvl(cat3, '_') as cat3, sum(val)
  from t1 join t2 on t1.f_id = t2.f_id
group by grouping sets ((cat1),(cat1, cat2),(cat1, cat2, cat3))
order by cat1, cat2 nulls first, cat3 nulls first

4
Một lựa chọn khác : group by cat1, rollup(cat2, cat3).
Andriy M

5
@AndriyM hoặc:group by rollup(cat1, cat2, cat3) having grouping(col1)=0
ypercubeᵀᴹ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.