Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回具有列值的行或缺少多行_Sql_Sql Server - Fatal编程技术网

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计量单位映射(

在最新版本的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
计量单位映射(第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