加入父母和孩子,每个父母仅显示一条记录

时间:2018-09-12 21:48:35

标签: sql sql-server join

我想知道T-SQL是否可以仅使用SQL和/或其他一些额外功能就产生如图片中表格所示的结果。甚至可能不使用光标。

请注意,对于记录2和3,没有显示父记录的值。它们仅在第一个中可见。

这不是左或右外部联接,在该联接中,对于第二个表上不匹配的每个值,您将得到一个空值。在这种情况下,我会得到这些记录,但是我不想一次又一次地显示它们。

This is an example of the result that I want to get.

2 个答案:

答案 0 :(得分:2)

使用LAG查看上一行:

select
  case when parentid = lag(parentid) over (order by parentid, childid)
       then parentid end as parentid,
  case when parentid = lag(parentid) over (order by parentid, childid)
       then parentname end as parentname,
   childid,
   childname,
   childvalue
from ...
order by parentid, childid;

答案 1 :(得分:2)

通常,这是在报告工具中处理的事情。如果您必须...

with data as (
    select *, row_number() over (partition by ParentID order by ChildID) as rn
    from T t
)
select *, case when rn = 1 then 'First' else '' end as ShowFirst
from data;