2011-09-30 255 views
0

我有一個表,其中的數據也能像這些如下:SQL查詢 - Select語句

CusID | Name | State | PhyAddress

160285 | FYZPZ | NULL | 0

160285 | FYZPZ | NJ | 1

160285 | FYZPZ | NJ | 1

CusID | Name | State | PhyAddress

160285 | FYZPZ | NJ xx | 1

CusID | Name | State | PhyAddress

160285 | FYZPZ | NULL | 0

160285 | FYZPZ | NJ xx | 0

我需要得到默認狀態給用戶。和邏輯是:

結果應該首先顯示肌肉發展狀態(PhyAddress = 1),並且如果 沒有物理地址(PhyAddress = 0),那麼它應該顯示的郵件ADRESS狀態(PhyAddress = 0)。如果沒有,狀態可以是空白的。

有多個客戶在表的時候,每個人都可以有一個像上面多行,我需要得到默認狀態爲每一個客戶。

的resuts需要展示的CusID, Name, State

結果請幫我查詢。 TIA

+0

你有能力改變表格的結構?你能否把地址分成一個新的表格和一個與名稱分開的類型? –

+0

都能跟得上:(這可以打破其他事情的應用程序。它是一個巨大的應用。 – Ree

回答

1

使用(評論後編輯):

SELECT DISTINCT Y.CusID, Y.Name, ISNULL (Y.S1, Y.S0) AS State 
FROM 
(
SELECT 
X.CusID, 
X.Name, 
(SELECT MAX (State) FROM Address T WHERE T.PhyAddress = 1 AND T.CusID = X.CusID) AS S1, 
(SELECT MAX (State) FROM Address T WHERE T.PhyAddress = 0 AND T.CusID = X.CusID) AS S0 
FROM Address AS X 
) AS Y 
+0

它給我的語法不正確在關鍵字'SELECT'附近,用於第3個選擇,並且它在第2個和第4個選擇語句中不識別X.table1。最後的SO也不被認可。 – Ree

+0

桌子的真名是什麼? – Yahia

+0

地址是真實姓名。 – Ree

0

搜索PhyAddress的最大值:

SELECT CusID, 
     State 
FROM table t1 
WHERE PhyAddress = 
    (
     SELECT MAX(t2.PhyAddress) 
     FROM table t2 
     WHERE t2.CusID = t1.CusID 
    ) 
+0

謝謝。PhyAddress有點運營商和最大的,一個不會工作。 – Ree

0

你嘗試過什麼?

讓我給你的東西讓你去

Select CusID, Name, case when phyaddress = something then something 
     when 
     when 
     ELSE ' ' END as State 

from sometable 

where something 
0

你可以做類似

select CusID, Name, State, PhyAddress from sometable where (CusID, PhyAddress) in 
    (select CusID, max(PhyAddress) from sometable) 
    group by CusID, Name, State, PhyAddress 
+0

PhyAddress有點柱和MAX上一個慣於工作:(? – Ree

+0

您正在使用什麼版本的MySQL我剛剛創建的表我的本地機器上physAddress作爲位和最大的工作只是罰款 –

+0

它的SQL 2008年它給我的錯誤:操作數數據類型位是最高經營者無效。 – Ree