我试图将我的实时场景解释如下。我有2个表,我需要一个查询来根据课程值返回已排序的学生。在以下示例中,生成的学生ID将按2,3,1的顺序排列。
STUDENT ID NAME PRIORITY STATUS 1 ABC 2 BCD 3 CDE
VARIABLE V_ID STU_ID KEY VALUE 1 1 name name1 2 1 **course** MCA 3 1 place place1 4 2 name name2 5 2 **course** BCA 6 2 place place2 7 3 name name1 8 3 **course** FCA 9 3 place place1
期望的结果(排序后,以相同的排序顺序显示两个表中的数据。):
ID NAME KEY VALUE 2 BCD name name2 2 BCD **course** BCA 2 BCD place place2 3 CDE name name1 3 CDE **course** FCA 3 CDE place place1 1 ABC name name1 1 ABC **course** MCA 1 ABC place place1
我们将不胜感激。
感谢, 斯瓦米。
答案 0 :(得分:2)
您似乎只需要使用常规联接,例如
SELECT student.id
from variable
join student
on variable.stu_id= student.id
where variable.key= '**course**'
order by variable.value asc
答案 1 :(得分:0)
只需加入变量两次,然后获取订单,一次加入所有数据。订单的连接需要只在学生和密钥上,所以所有记录都应用“排序顺序”。
虽然我不确定在每个学生获得结果的课程值之后你正在分拣什么。关键是有道理但没有硬编码案例陈述我无法得到你的结果。
With student (ID, NAME, PRIORITY, STATUS) as (
SELECT 1, 'ABC', NULL, NULL FROM DUAL UNION ALL
SELECT 2, 'BCD', NULL, NULL FROM DUAL UNION ALL
SELECT 3, 'CDE', NULL, NULL FROM DUAL),
"VARIABLE" (V_ID, STU_ID, "KEY", "VALUE") as (
SELECT 1, 1, 'name', 'name1' FROM DUAL UNION ALL
SELECT 2, 1, '**course**', 'MCA' FROM DUAL UNION ALL
SELECT 3, 1, 'place', 'place1' FROM DUAL UNION ALL
SELECT 4, 2, 'name', 'name2' FROM DUAL UNION ALL
SELECT 5, 2, '**course**', 'BCA' FROM DUAL UNION ALL
SELECT 6, 2, 'place', 'place2' FROM DUAL UNION ALL
SELECT 7, 3, 'name', 'name1' FROM DUAL UNION ALL
SELECT 8, 3, '**course**', 'FCA' FROM DUAL UNION ALL
SELECT 9 , 3, 'place', 'lace1' FROM DUAL)
SELECT V.STU_ID, S.Name, V.Key, V.VALUE
FROM STUDENT S
INNER JOIN VARIABLE V
on S.ID = V.Stu_ID
LEFT JOIN VARIABLE V2
on S.ID = V2.Stu_ID and V2.Key = '**course**'
ORDER BY V2.Value, V.Key