如何从SQL中的一个字段中选择多个对象

时间:2015-08-25 14:54:00

标签: sql

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

为了满足要求,我不需要客户类型等于客户端,或非客户端,但客户端和Non_Client。

这是我迄今为止所做的工作的一个例子。如果您知道更好的优化方法以及解决问题,请告诉我。

输出应该看起来像这样

 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
Where IB1.Client = 'Client' 
AND IB1.Non_Client = 'NonClient'

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

3 个答案:

答案 0 :(得分:0)

使用条件聚合,您可以这样做:

select type from TableName
group by type
having sum(case when client = 'Client' then 1 else 0 end) >= 1 and
       sum(case when client = 'NonClient' then 1 else 0 end) >= 1

答案 1 :(得分:0)

您可以这样做:

Select TB1.Customer_ID, IB1.Customer_Type AS Non_client IB2.Customer_Type AS Client
From Client TB1
Inner join Client_ReF XB1 ON(TB1.Client_NO = XB1.Client_NO)
Inner join Client_XREC FB1 ON(FB1.Customer_ID= TB1. Client_NO AND FB1.Client_ACCT = TB1.ACCT)
Inner join Client_Instr IB1 ON(XB1.Client_Instruct_NO = IB1.Client_Instruct_NO)
Inner join Client_Instr IB2 ON(XB1.Client_Instruct_NO = IB2.Client_Instruct_NO), 
Where IB1.Client = 'Client' 
AND IB2.Non_Client = 'NonClient'

注意:

  1. Client_Instr表使用两次不同的别名。
  2. 我已将隐式联接更改为显式联接。隐式连接已经过时了20多年了。
  3. 声明基于您发布的声明。由于没有提供样本数据,我无法验证它是否真正正常工作。

答案 2 :(得分:-1)

如果这是在sql中你会做类似的事情:

SELECT * from clients c
WHERE c.client = 'Client' AND c.client = 'NonClient'

我仅为示例添加了表客户端,但您需要将此表/列替换为适用于您的示例的值。