Oracle按列值排序

时间:2017-10-26 19:41:38

标签: sql oracle

我试图将我的实时场景解释如下。我有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

我们将不胜感激。

感谢, 斯瓦米。

2 个答案:

答案 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