Sql 返回具有列值的行或缺少多行
在最新版本的SQL Server中,我有一个SQL查询,如下所示:Sql 返回具有列值的行或缺少多行,sql,sql-server,Sql,Sql Server,在最新版本的SQL Server中,我有一个SQL查询,如下所示: SELECT s.* FROM Uom s INNER JOIN catalogue l ON l.Uom = s.SAPUom WHERE l.Id IN (3, 4) ORDER BY (CASE WHEN s.compid IS NOT NULL OR s.supplierid IS NOT NULL THEN 1 ELSE 2 END) 输出如下: 如果表中存在CompId和SupplierId计量单位映射(
SELECT s.*
FROM Uom s
INNER JOIN catalogue l ON l.Uom = s.SAPUom
WHERE l.Id IN (3, 4)
ORDER BY (CASE WHEN s.compid IS NOT NULL OR s.supplierid IS NOT NULL THEN 1 ELSE 2 END)
输出如下:
如果表中存在CompId
和SupplierId
计量单位映射(第1行而非第2行),则查询应返回该计量单位否则返回空计量单位
第3行在表中没有指定的计量单位(compId/SupplierId
),也需要返回
任何帮助都将不胜感激我怀疑您希望每个
SAPUom
一行。如果是这样,您可以使用以下技巧:
select top (1) with ties s.*
from Uom s inner join
catalogue l
on l.Uom = s.SAPUom
where l.Id in (3, 4)
order by row_number() over (partition by s.SAPUom
order by (CASE WHEN s.compid is not null OR s.supplierid is not null THEN 1 ELSE 2 END)
);
要获得第三行,我认为可以使用UNION ALL添加表Uom中的行,这些行在目录中没有对应的行
SELECT s.*
FROM Uom s
INNER JOIN
catalogue l ON l.Uom = s.SAPUom
WHERE l.Id IN (3, 4))
union all
SELECT s.*
FROM Uom s
WHERE not exists (select 1 from catalogue c where c.Uom = s.SAPUom);
它返回与前面相同的结果,但我将查看行\ u number()。Thanks@Kevin . . . 我忽略了这个技巧,
top(1)与ties
。