我想知道T-SQL是否可以仅使用SQL和/或其他一些额外功能就产生如图片中表格所示的结果。甚至可能不使用光标。
请注意,对于记录2和3,没有显示父记录的值。它们仅在第一个中可见。
这不是左或右外部联接,在该联接中,对于第二个表上不匹配的每个值,您将得到一个空值。在这种情况下,我会得到这些记录,但是我不想一次又一次地显示它们。
答案 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;