2011-09-30 143 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