视图中的持久变量

时间:2017-01-19 12:52:58

标签: sql view crystal-reports

我有这个问题,我想使用一个只在某些条件下发生变化的变量...

1 Item1 <parent>
2 Item2 <child>
3 Item3 <child>
4 Item4 <child>
5 Item5 <parent>
6 Item6 <child>

我有一个数据表,一旦你选择了父项,它就会填充它下面的相关子项。 我遇到的问题是,我想识别子项所属的父项 - 数据中唯一的方法是它们到达的顺序(即每个子项是最后一个父项的子项)序列)

如果我可以使用变量 - 那么我可以在每次识别父项时将值分配给变量 - 并在每行上打印出该变量的值。像这样:

1 Item1 <parent> Item1
2 Item2 <child>  Item1
3 Item3 <child>  Item1
4 Item4 <child>  Item1
5 Item5 <parent> Item5
6 Item6 <child>  Item5

所以我知道每个孩子属于哪个父母。无论如何,我认为我可以获得类似上面的输出(我需要使用视图,因为我想最终在水晶报表中链接输出)

作为以下评论的后续跟进...这就是我希望代码在我的系统上为多个订单工作的方式,希望它有意义!

with 
parent_ranges as(
    select SOHNUM_0,ITMREF_0 as ITM, SOPLIN_0, LEAD(SOPLIN_0, 1, NULL) over (order by SOHNUM_0,SOPLIN_0) NX
   from <MY_DB>.SORDERP with (nolock)
 where LINTYP_0 = 6 –Parent
--and SOHNUM_0 = '<My Order Number>'
) 
select case when t1.LINTYP_0 in (6,7,8,9) then isnull(t2.ITM,'?') else 'NO'  end as PARENT_ITEM, t1.LINTYP_0,t1.ITMREF_0   
from <MY_DB>.SORDERP t1 with (nolock)
left join parent_ranges t2 on (t1.SOHNUM_0 = t2.SOHNUM_0 and t1.SOPLIN_0 >=  t2.SOPLIN_0 and ((t1.SOPLIN_0 < t2.NX) OR t2.NX IS NULL))
where t1.SOHNUM_0 = '<My Order Number>'

你能看到一种我不需要的方式      - 和SOHNUM_0 ='' 在视图中划线?

1 个答案:

答案 0 :(得分:0)

从sql-server 2012,您可以使用LEAD功能:

;with 
parent_ranges as(
    select *, LEAD(id, 1, NULL) over (order by id) NX
    from @tbl
    where kind = 'parent'
) 
select T1.*, T2.Item PARENT_ITEM
from @tbl t1
left join parent_ranges t2 on t1.id >= t2.ID and (t1.id < t2.NX OR t2.NX IS NULL)