根据列值选择行

时间:2014-05-20 13:20:52

标签: sql sql-server case

我在SQL中有一个select语句。 select语句选择licenseNo和LicenseID。基本上,我希望它返回LicenseNo,具体取决于它是哪个LicenseTypeID。

例如,如果LicenseTypeID = 6,我希望它返回LicenseNo,如果没有ID等于6,则返回LicenseNo,其中LicenseTypeID = 5,依此类推。

现在,我有一个连接导致多个LicenseNos被返回,因为有多个LicenseTypeID。我只希望它返回LicenseNo和其中ID为6优先的行,然后是5,然后是4,依此类推。它现在看起来像这样:

Select a.Name,
       a.addressNo,
       b.LicenseNo,
       LicenseTypeID
  from addressbook a 
  join licenses b
    on a.addressNo = b.addressNo

Returns
111    CompanyA  1234   6
111    CompanyA  2222   4

所以我只希望它返回第一行,如果该ID不存在(6)我希望它返回第二行4.

2 个答案:

答案 0 :(得分:1)

您需要使用子选择来确定每个地址的最大许可证号:

select 
  a.name,
  a.addressno,
  l.licenseno,
  l.licensetypeid
from addressbook a 
join licenses l on l.addressno = a.addressno
where l.licenseno =
(
  select max(licenseno)
  from licenses
  where licenses.addressno = a.addressno
);

答案 1 :(得分:0)

试试这个。

SELECT * FROM 
(SELECT ROW_NUMBER() OVER 
      (PARTITION BY l.licenseno ORDER BY l.licenseno DESC) NO,
       a.Name,
       a.addressNo,
       b.LicenseNo,
       LicenseTypeID
  from addressbook a 
  join licenses b
    on a.addressNo = b.addressNo) AS t WHERE no = 1
相关问题