SQL - 主要帐户存在于未成年人之前

时间:2015-04-09 03:42:16

标签: sql sql-server

我是SQL的新手(使用SQL Server Management Studio)并且没有更好地理解术语我担心我不知道该搜索什么可以找到这个问题的答案某处。我的问题是,帐号被分为两部分:主要和次要,并且有一个条件,其中未成年人是" 00"必须存在才能有一个未成年人" 01"通过" 99"拥有相同的主要帐户。帐号之间的连字符用于说明目的。

  • 主要帐号= 4位数(1000)
  • 次要帐号= 2位数(00)

正确帐号的示例

  • 一○○○至○○年
  • 1000-01
  • 1000至05年

INCORRECT帐号的示例

  • 2000-00(正确的数字)
  • 2000-02(正确的数字)
  • 2001-01(帐户不能作为帐户存在" 2001-00"不存在)

主要帐户可以有多次迭代(1000)和次要帐户的多次迭代(00,01,02,05),但是,如果(2001-00)没有,则不能存在(2001-01)。

我正在寻找的解决方案是输出" 2001-01"因为该帐户在帐户" 2001-00"之前不能存在不存在。

如果有任何问题,我会尽力回答。谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个

DECLARE @Account_Num TABLE
  (
     id             INT IDENTITY(1, 1),
     account_number VARCHAR(10)
  )

INSERT INTO @Account_Num
VALUES      ('1000-00'),
            ('1000-01'),
            ('1000-05'),
            ('2000-00'),
            ('2000-02'),
            ('2001-01')

SELECT A.ACCOUNT_NUMBER,
       CASE
         WHEN T.ACCOUNT_NUMBER IS NOT NULL THEN 'VALID NUMBER'
         ELSE 'INVALID NUMBER'
       END AS ACCOUNT_STATUS
FROM   @Account_Num A
       OUTER APPLY (SELECT TOP 1 B.account_number
                    FROM   @Account_Num B
                    WHERE  LEFT(A.account_number, 4) = LEFT(B.account_number, 4)
                           AND RIGHT(B.account_number, 2) = '00')T