2013-07-12 59 views
0

我有一个table,列codedocumentcode列可能包含字母数字值(仅限字母)和/或数值(仅限数字)。在该模型中,每个数字code都有一个字母数字相当于code。下面的记录代表这种情况的一个示例(在形式(documentcode);(documentcode):SQL,加入同一张表

(12345678900,ABC);(12345678900,999)

但是,一个字母数字code可能并不总是有一个等效数字code,所以下面的例子代表了一种情况,我们有3个不同的记录

(12345678900,ABC);(12345678900,999);(00987654321,XYZ);(11111111111,DEF)

考虑到这一点,我想要做的就是跟随着g:我用来搜索记录的东西总是字母数字code s,而当我有一个等效数字时,我想以数字结果作为结果,但是当alpha没有数字等值时,我需要字母数字code

举例来说,如果我执行下面的选择,我会得到下面的结果:

  1. SELECT code FROM table WHERE code = 'ABC' - >结果:999
  2. SELECT code FROM table WHERE code = 'DEF' - >结果:DEF
  3. SELECT code FROM table WHERE code = 'XXX' - >结果: (空白)

我很感谢有人能帮助我。

问候,

AMR

回答

0

试试这个

SELECT 
    f1.doc 
    , COALESCE(f2.code, f1.code) code 
FROM foo f1 
LEFT JOIN(
    SELECT doc, code 
    FROM foo 
    WHERE code <> @code 
) f2 ON f2.doc = f1.doc 
WHERE f1.code = @code 

demo

+0

感谢您的关注,但它没有工作,哥们。 – Arthur