2015-08-25 64 views
-2

因此,我有一個需求,即我需要一個客戶類型來等於兩個不同的事情。如何在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' 

我省略了,我覺得是不必要的幾個其他過濾器。這也可能沒有意義,但我試圖改變東西的名稱以保持自己的合規性。

+0

你可以嘗試發表表格結構和一些數據輸出嗎?謝謝。 –

+1

歡迎使用stackoverflow。請閱讀[問]。 –

+3

**編輯**您的問題並向我們展示'create table'語句和您嘗試過的查詢,一些樣本數據和基於該樣本數據的輸出。 –

回答

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

如果這是SQL,你會做這樣的事情:

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

我添加表的客戶只是爲例子,但你需要用適用於您示例的值替換此表/列。

+1

這不會返回任何記錄,因爲不可能有任何記錄的字段客戶端同時是「客戶端」和「非客戶端」。 –

+0

他試圖應用的邏輯本身並不合理。但在這種情況下,他想要檢索一個可能適用於這兩種情況的行,我的答案的目的是顯示如何在sql中使用AND。 –

+1

但是你看看它,OP只能說*不同*行,一個用於'Client',一個用於'NonClient',因爲* one *記錄中的* one *字段當然只能包含*一個*值。但我同意,這個要求是不可理解的。 –

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. 該聲明基於您發佈的聲明。由於沒有提供樣本數據,我無法驗證它實際上是否正常工作。
相關問題