如何使用同一个表中的值从同一个表中提取值?

时间:2017-06-16 19:57:34

标签: sql

我有一个包含描述列的表,同一个表中有各种其他列包含反映这些描述的整数值。在应用程序中,我需要使用这些值来记录描述。

sb

查询需要返回:

SC_CODE  SC_DESC            UT_CODE  SC_ALT_CODE  SC_CANX_CODE
1        BKG RESERVATION    1        4            901       
4        BKG CASH TRADE     1        NULL         904       
901      BKG RES CANCEL     1        NULL         NULL

我把SC_CODE第4行放在那里就像一个管理员。有任何想法吗???

1 个答案:

答案 0 :(得分:0)

以下是一些可行的方法。

1。简单代码

这是最容易理解的。您拥有来自不同表的数据的每个列都由子查询填充。该子查询对结果集中的每一行执行一次,拉回其SC_CODE与主表中相关列(SC_ALT_CODE或SC_CANX_CODE)匹配的“第一”描述值。

Select a.SC_CODE
, a.SC_DESC
, a.UT_CODE
, (
    select top 1 SC_DESC 
    from TheTable b 
    where b.SC_CODE = a.SC_ALT_CODE
) [SC_DESC(SC_ALT_CODE)]
, (
    select top 1 SC_DESC 
    from TheTable b 
    where b.SC_CODE = a.SC_CANX_CODE
) [SC_DESC(SC_CANX_CODE)]
from TheTable a
where SC_CODE = 1

一个重要的说明;如果存在具有相同SC_CODE的多个行(例如,具有值901的2行),则上述列可以返回列[SC_DESC(SC_CANX_CODE)]的任一值。我们可以通过向相关子查询添加order by子句来改变这种情况,如果该情况存在的话。是一个问题;即保证订单,这些结果将在&因此,这将是第一次。

2。使用联接

通常这是更好的方法,但需要更多地了解要使用的SQL。

Select a.SC_CODE
, a.SC_DESC
, a.UT_CODE
, b.SC_DESC [SC_DESC(SC_ALT_CODE)]
, c.SC_DESC [SC_DESC(SC_CANX_CODE)]
from TheTable a
left outer join TheTable b
    on b.SC_CODE = a.SC_ALT_CODE
left outer join TheTable c
    on c.SC_CODE = a.SC_CANX_CODE
where a.SC_CODE = 1

注意

上面的两个SQL示例都是有效的,并且都会为您提供所要求的内容。视情况而定,可能比另一种表现更好;通常#2会表现得更好,但并非在所有情况下都不是这样。

但重要的是,这两者的输出并不总是保持一致。也就是说,如果你的表中有两行,SC_CODE的值为901,那么#1只有1行,而#2只有2行。这是因为#1仅从主(a)表中的每一行的每个链接表返回1个结果;而在#2中,我们从3(a,b,& c)表的每个匹配组合得到1个结果行。