SQL查询-Select语句

SQL查询-Select语句,sql,sql-server-2008,select,Sql,Sql Server 2008,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 |

我有一个表格,其中的数据可能如下所示:

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),那么它应该显示邮件地址状态(
PhyAddress
=0)。如果没有,则状态可以为空

表中有多个客户,每个客户可以有多行,如上所述,我需要获取每个客户的默认状态

结果需要显示CusID、名称、状态的结果


请帮我解答这个问题。TIA

搜索地址的最大值:

SELECT CusID, 
       State
FROM table t1
WHERE PhyAddress = 
    (
        SELECT MAX(t2.PhyAddress)
        FROM table t2
        WHERE t2.CusID = t1.CusID
    )
你试过什么

让我给你点东西让你走

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

from sometable

where something

你可以这样做

select CusID, Name, State, PhyAddress from sometable where (CusID, PhyAddress) in
  (select CusID, max(PhyAddress) from sometable)
  group by CusID, Name, State, PhyAddress
使用(注释后编辑):


你有能力改变桌子的结构吗?您能否将地址拆分成一个新表,并将其类型与名称分开?否:(它可以破坏应用程序中的其他东西。这是一个巨大的应用程序。谢谢。PhyAddress是一个位运算符,MAX不会处理这个。您使用的是什么版本的MySQL?我刚刚在本地计算机上用physAddress创建了一个表,MAX工作得很好。它的SQL 2008。它给了我一个错误:操作数数据类型位对于r max运算符。这是有道理的。我给这个问题加了标签,因为我们回答这个问题时都把它当作一个MySQL问题,而不是SQL Server 2008问题。它在关键字“SELECT”附近给了我错误的语法。对于第三个SELECT。它无法识别第二个和第四个SELECT语句中的X.table1。最后一个SO也无法识别泽德,你桌子的真名是什么?
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