条件where子句

加比

我需要两个表之间的联接查询的过滤结果,但没有“ where子句”的条件。

我需要的是基于id_project进行过滤,如下所示:

  1. 如果id_project等于24 (默认项目为24 ),则它应仅返回id_project = 24的行。在这里将选择行1,3 ... 10

  2. 如果id_project等于25,那么我需要具有id_project = 25的行以及具有“ id_project = 24而不是id_project 25的因此将选择2至11行

使用此查询:

SELECT tp.id_tag, tp.id_project, tp.NJTagName, tp.node_level , tl.id_level
    FROM instrumentation.dbo.tag_project tp
    INNER JOIN instrumentation.dbo.tag_level tl
    ON tl.id_tag=tp.id_tag
// 
where tl.id_level=69  and tp.node_level=1 

我得到这个结果:

在此处输入图片说明

如何更改查询以执行此操作?

托斯滕·凯特纳

想一想有关您的请求的更多信息,可以归结为:对于每个id_tag,请给我提供所请求的ID;如果不提供ID,则为24。这可以在一个查询中完成,在该查询中,您使用ROW_NUMBER的排名,在该排名中,您希望使用请求的ID而不是24。

select *
from
(
  select
    tp.*,
    row_number() over(partition by id_tag 
                      order by case when id_project = 24 then 2 else 1 end) as rn
  from tag_project tp
  where id_project in (24, @REQUESTED_ID)
) ranked
where rn = 1;

这是您原来的查询已相应更改:

SELECT id_tag, id_project, NJTagName, node_level, id_level
FROM
(
  SELECT tp.id_tag, tp.id_project, tp.NJTagName, tp.node_level , tl.id_level
       , row_number() over (partition by tp.id_tag order by case when tp.id_project = 24 then 2 else 1 end) as rn 
      FROM instrumentation.dbo.tag_project tp
      INNER JOIN instrumentation.dbo.tag_level tl ON tl.id_tag=tp.id_tag
  WHERE tl.id_level=69 AND tp.node_level=1 
  AND tp.id_project in (24, @REQUESTED_ID)
) ranked
WHERE rn = 1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章