订单在同一个表中时的SQL查询排序

时间:2012-02-19 15:51:07

标签: sql

我有两个表,一个包含基本资源信息,包含列和值,如:

enter image description here

一个单独的exta关联值表,其中包含列和数据,如:

enter image description here

我要做的是写一个SQL查询,它将连接两个并生成一个由“order”键排序的结果,如下所示:

enter image description here

我不确定如何使我的加入工作,以便我可以拉取位置值,然后按同一个表中的顺序值拉出。

在你问之前,我不能重新设计数据库模式,我必须使用它。任何帮助非常感谢!

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT t1.RESOURCE_NO
       ,t1.NAME
       ,t2.VALUE
       ,t3.VALUE -- Included so that you can "see" the value
  FROM table1 t1
 INNER JOIN table2 t2
    ON t1.RESOURCE_NO = t2.RESOURCE_NO AND t2.[KEY] = 'location'
 INNER JOIN table2 t3
    ON t1.RESOURCE_NO = t3.RESOURCE_NO AND t3.[KEY] = 'order'
 ORDER BY t3.VALUE ASC

答案 1 :(得分:0)

这个总体思路应该有效(在Oracle下测试):

SELECT *
FROM TABLE1
    JOIN TABLE2 TABLE2_ORDER
        ON TABLE1.RESOURCE_NO = TABLE2_ORDER.RESOURCE_NO AND TABLE2_ORDER.KEY = 'order'
    JOIN TABLE2 TABLE2_NONORDER
        ON TABLE1.RESOURCE_NO = TABLE2_NONORDER.RESOURCE_NO AND TABLE2_NONORDER.KEY <> 'order'
ORDER BY
    TABLE2_ORDER.VALUE

用简单的英语:

  • 加入订单和非订单值。
  • 然后只按订单值排序。

(当然,这假设每个TABLE1行有完全一个'order'值。如果不是这种情况,则此查询将“乘以”或“擦除”行。)