我在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.
答案 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