0

我有一个包含 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。我假设这里需要一个子选择?

如果它有父账户,它应该根据自己或其父账户返回最高的阻止值

4

3 回答 3

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' 
于 2012-04-10T11:05:39.233 回答
0

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

ParentAccount = 1,SubAccount = 2,将解决该问题

然后你可以通过 ParentAccount 选择类似的东西

Select parent.Blocked From SomeTable parent
inner join SomeTable Children On Parent.ParentAccount = Child.ParentAccount

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

于 2012-04-10T10:57:25.183 回答
0

用这个 :

select AccountNum ,(select count(*) from CustTable  where AccountNum like t.AccountNum +'-%') as Totalsubacc from CustTable t where AccountNum not like '%-%'
于 2012-04-10T11:22:23.163 回答