需要 return 来自单个字段的多个条目 Table
Need to return multiple entries from a single field in One Table
所以这就是问题所在我有一个要求,我需要一个客户类型来等于两个不同的东西。
为了满足要求,我不需要客户类型等于客户,或非客户但等于客户,以及 Non_Client。每个 Customer_No 可以有多个客户类型
这是我迄今为止所做工作的示例。如果您知道优化此问题以及解决问题的更好方法,请告诉我。
输出应该是这样的
CustomerID CustomerType CustomerType
--------------------------------------
2345 Client NonClient
Select TB1.Customer_ID, IB1.Customer_Type, AS Non_client IB1.Customer_Type AS Client
From Client TB1, Client_ReF XB1, Client_Instr IB1, Client_XREC FB1
Where XB1.Client_NO = TB1.Client_NO
AND FB1.Client_ACCT = TB1.ACCT
AND XB1.Client_Instruct_NO = IB1.Client_Instruct_NO
AND FB1.Customer_ID= TB1. Client_NO
AND IB1.Client = 'Client'
AND IB1.Non_Client = 'NonClient'
我省略了其他一些我认为不必要的过滤器。这也可能没有意义,但我试图更改东西的名称以保持合规性。
首先是一个小语法错误:
"AS Non_client "
前不能有逗号
那么您要做的是使同一列的 1 个值等于 2 个不同的值,这永远不可能是真的:
1 条记录的 IB1.Customer_Type 永远不能同时等于 "Client" 和 "NonClient"。
这里的关键是1个客户可以有多个记录,并且customer_type中的记录可以不同。因此,要使用它,我们需要将这些记录连接在一起,这很容易,因为它们共享 Customer_ID:
Select TB1.Customer_ID,
IB1.Customer_Type AS Client,
IB2.Customer_Type AS Non_client
From Client TB1,
Client_ReF XB1,
Client_Instr IB1,
Client_Instr IB2,
Client_XREC FB1
Where XB1.Client_NO = TB1.Client_NO
AND FB1.Client_ACCT = TB1.ACCT
AND XB1.Client_Instruct_NO = IB1.Client_Instruct_NO
AND FB1.Customer_ID= TB1.Client_NO
AND IB1.Client = 'Client'
AND XB1.Client_Instruct_NO = IB2.Client_Instruct_NO
AND IB2.Non_Client = 'NonClient';
由于我没有完全理解您的数据和结构,以上内容可能实际上不起作用,但应该会让您走上正确的道路。特别是在 IB2 与 XB1 的连接周围,您可能必须将 IB2 与所有与 IB1 相同的表连接起来。
然而,比这更好的方法是使用 EXISTS 语句,我会留给您研究它。不同之处在于,上面将把同一客户的所有记录连接在一起,而如果至少有 1 个 "NonClient" 记录实例,则只会满足 EXISTS。
所以这就是问题所在我有一个要求,我需要一个客户类型来等于两个不同的东西。
为了满足要求,我不需要客户类型等于客户,或非客户但等于客户,以及 Non_Client。每个 Customer_No 可以有多个客户类型
这是我迄今为止所做工作的示例。如果您知道优化此问题以及解决问题的更好方法,请告诉我。
输出应该是这样的
CustomerID CustomerType CustomerType
--------------------------------------
2345 Client NonClient
Select TB1.Customer_ID, IB1.Customer_Type, AS Non_client IB1.Customer_Type AS Client
From Client TB1, Client_ReF XB1, Client_Instr IB1, Client_XREC FB1
Where XB1.Client_NO = TB1.Client_NO
AND FB1.Client_ACCT = TB1.ACCT
AND XB1.Client_Instruct_NO = IB1.Client_Instruct_NO
AND FB1.Customer_ID= TB1. Client_NO
AND IB1.Client = 'Client'
AND IB1.Non_Client = 'NonClient'
我省略了其他一些我认为不必要的过滤器。这也可能没有意义,但我试图更改东西的名称以保持合规性。
首先是一个小语法错误:
"AS Non_client "
前不能有逗号那么您要做的是使同一列的 1 个值等于 2 个不同的值,这永远不可能是真的:
1 条记录的IB1.Customer_Type 永远不能同时等于 "Client" 和 "NonClient"。
这里的关键是1个客户可以有多个记录,并且customer_type中的记录可以不同。因此,要使用它,我们需要将这些记录连接在一起,这很容易,因为它们共享 Customer_ID:
Select TB1.Customer_ID,
IB1.Customer_Type AS Client,
IB2.Customer_Type AS Non_client
From Client TB1,
Client_ReF XB1,
Client_Instr IB1,
Client_Instr IB2,
Client_XREC FB1
Where XB1.Client_NO = TB1.Client_NO
AND FB1.Client_ACCT = TB1.ACCT
AND XB1.Client_Instruct_NO = IB1.Client_Instruct_NO
AND FB1.Customer_ID= TB1.Client_NO
AND IB1.Client = 'Client'
AND XB1.Client_Instruct_NO = IB2.Client_Instruct_NO
AND IB2.Non_Client = 'NonClient';
由于我没有完全理解您的数据和结构,以上内容可能实际上不起作用,但应该会让您走上正确的道路。特别是在 IB2 与 XB1 的连接周围,您可能必须将 IB2 与所有与 IB1 相同的表连接起来。
然而,比这更好的方法是使用 EXISTS 语句,我会留给您研究它。不同之处在于,上面将把同一客户的所有记录连接在一起,而如果至少有 1 个 "NonClient" 记录实例,则只会满足 EXISTS。