需要从一个表中的单个字段返回多个条目

时间:2015-08-25 16:42:46

标签: sql oracle-sqldeveloper

所以这是我需要的一个问题,我需要一个客户类型等于两个不同的东西。

要满足要求,我不需要客户类型等于客户端,或非客户端,但客户端和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'

我省略了一些我认为不必要的其他过滤器。这也可能没有意义,但我试图更改内容的名称以保持自己的合规性。

1 个答案:

答案 0 :(得分:0)

首先是一个小的句法错误:

你不能在" AS Non_client"

之前使用逗号

那么你要做的是让1个值等于同一列的2个不同的东西,这是永远不会是真的:

IB1.Customer_Type为1记录永远不能等于"客户"和" 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的连接时,您可能必须使用与IB1相同的表来加入IB2。

比这更好的方式,我将让你去研究它,正在使用EXISTS声明。不同之处在于,上述内容将同时加入同一客户的所有记录,而如果至少有一个" NonClient"的实例,则只会满足EXISTS。记录。