Sql 如何在Oracle中应用联接以获得结果
我有以下三个表格:Sql 如何在Oracle中应用联接以获得结果,sql,oracle,Sql,Oracle,我有以下三个表格: SHIFT_MASTER,PATTERN_MASTER,PATTERN_DETAILS S_ID、p_ID、p_D_ID分别是SHIFT_MASTER、PATTERN_MASTER和PATTERN_DETAILS表的主键 SHIFT_MASTER S_ID | S_NUMBER| S_Name --------------------------------- 1 A MORNING 2 B A
SHIFT_MASTER,PATTERN_MASTER,PATTERN_DETAILS
S_ID、p_ID、p_D_ID分别是SHIFT_MASTER、PATTERN_MASTER和PATTERN_DETAILS表的主键
SHIFT_MASTER
S_ID | S_NUMBER| S_Name
---------------------------------
1 A MORNING
2 B AFTERNOON
3 C NIGHT
PATTERN_MASTER
P_ID | P_NAME
----------------
1 Pattern 1
2 Pattern 2
PATTERN_DETAILS
P_D_ID|P_ID | S_ID| ...
---------------------
1 1 1
2 1 2
3 1 3
4 1 2
5 1 1
6 2 3
7 2 2
8 2 1
9 2 3
我得到的输出是
P_ID | S_ID
1 1,2,3,2,1
2 3,2,1,3
使用查询
SELECT PATTERN_DETAILS.P_ID "PATTERN",
LISTAGG(PATTERN_DETAILS.S_ID, ', ')
WITHIN GROUP (ORDER BY PATTERN_DETAILS.P_D_ID) "SHIFT"
FROM PATTERN_DETAILS
GROUP BY PATTERN_DETAILS.P_ID;
我想要的是
P_NAME | S_NUMBER
Pattern 1 A,B,C,B,A
Pattern 2 C,B,A,C
有什么建议吗???我想显示的不是P_ID而是图案名称,我想显示的不是班次ID而是班次编号。如何与listagg函数一起执行联接操作?
您需要联接所有三个表才能获得此结果
SELECT pm.p_name "P_NAME",
listagg(sm.s_number, ', ') WITHIN GROUP (ORDER BY pd.p_d_id) "S_NUMBER"
FROM pattern_master pm,
pattern_details pd,
shift_master sm
WHERE sm.s_id= pd.s_id
AND pm.p_id = pd.p_id
GROUP BY pm.p_name;