SQL - 使用子选择

时间:2012-04-10 10:43:09

标签: sql

我有一个包含3行的表:AccountNum,InvoiceAcc和Blocked。我的表中的大多数行都有InvoiceAcc但不是全部。 AccountNum是唯一标识符,并且可以使多个AccountNum具有相同的InvoiceAcc。 Blocked是一个从0,1和2变化的int值。

InvoiceAcc基于AccountNum,因此将其视为父母办公室,然后该办公室将继续进行儿童办公室。

例如,父母办公室如此:

AccountNum - 1, InvoiceAcc - null, Blocked - 2可能有这样的儿童办公室:

AccountNum - 1-1, InvoiceAcc - 1, Blocked - 0

AccountNum - 1-2, InvoiceAcc - 1, Blocked - 1

我想要做的是检查一行的InvoiceAcc及其后续的AccountNum阻止值。所以在我上面的例子中,如果我这样做了一个查询:

SELECT BLOCKED FROM CustTable WHERE AccountNum = '1-1' 

它将返回0,因为这是阻止值。我想要它做的是返回2,因为它具有更高的值和它的父帐户。此外,如果父acc的阻值为1且我查询的子帐号的阻值为2,那么它应该返回2.我假设这里需要一个子选择?

如果它有父帐户

,它应该根据自身或其父帐户返回最高的阻止值

3 个答案:

答案 0 :(得分:1)

您可以像这样只添加一个级别(例如,父级 - >儿童)

SELECT CASE 
  WHEN child.blocked > COALESCE(parent.blocked,0)
  THEN child.blocked 
  ELSE parent.blocked 
END as blocked
FROM CustTable child 
LEFT JOIN CustTable parent ON child.InvoiceAcc = parent.AccountNum
WHERE child.AccountNum = '1-1' 

答案 1 :(得分:0)

这有点乱。 这是“1-?”那让你搞砸了。

ParentAccount = 1,SubAccount = 2,将解析

然后你可以通过ParentAccount选择像

这样的东西
Select parent.Blocked From SomeTable parent
inner join SomeTable Children On Parent.ParentAccount = Child.ParentAccount

保持你当前的结构,你将不得不想出一堆字符串函数来从“A-C”中提取A

答案 2 :(得分:0)

使用此:

select AccountNum ,(select count(*) from CustTable  where AccountNum like t.AccountNum +'-%') as Totalsubacc from CustTable t where AccountNum not like '%-%'