所以这是我需要的一个问题,我需要一个客户类型等于两个不同的东西。
要满足要求,我不需要客户类型等于客户端,或非客户端,但客户端和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'
我省略了一些我认为不必要的其他过滤器。这也可能没有意义,但我试图更改内容的名称以保持自己的合规性。
答案 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。记录。