以下是我的示例表数据。有一个订单号,表按ITEM列排序。每次BREAKOUT为True时,BREAK_M列只是一个运行计数。您可以看到BREAK_MCT的其他行显示为NULL。我想要一个像LIKETHIS
列这样的查询,其中BREAK_M重复自身直到下一个值开始并重复自身。
ORDERNO BREAKOUT ITEM_ID BREAK_M LIKETHIS
2411 True 9290 1 1
2411 False 9291 NULL 1
2411 False 9292 NULL 1
2411 False 9293 NULL 1
2411 True 9300 2 2
2411 False 9301 NULL 2
2411 False 9302 NULL 2
2411 False 9303 NULL 2
提前感谢您的帮助。
答案 0 :(得分:1)
您可以尝试此查询以获得所需的结果。
SELECT ORDERNO, BREAKOUT, ITEM_ID, BREAK_M,
(SELECT MAX(BREAK_M)
FROM SampleTable
WHERE ITEM_ID <= ST.ITEM_ID
) AS LIKETHIS
FROM SampleTable AS ST
答案 1 :(得分:0)
我确信有更好的方法可以做到这一点,但是这样的事情应该有效
select *,
(Select top 1 BREAK_M -- OR COUNT, WHATEVER THE REAL COLUMN NAME IS
from BREAK4
where Item_ID <= T.Item_ID
and BREAK_OUT = 1
order by item_ID desc
) as LIKETHIS
from BREAK4 T
ORDER BY ITEM_ID
编辑:在评论中看小提琴后
试试这个http://sqlfiddle.com/#!6/8974b/25。问题是
(1)你的小提琴与你上面的问题没有相同的列,我不得不将Break_M改为Count。 (2)你在小提琴中的空值不是真正的空值,它们是一个字符串,表示'NULL',这不是同一个东西。取决于您的真实数据库对于实际空值可能需要(非空)或“&lt;&gt;如果不是,则为“NULL”。最好忽略此列并使用Breakout = 1(true),就像这样
[ngClass]="{active: (searching === search.searchKey)}"
答案 2 :(得分:0)
试试这个,
create table #t(ORDERNO int,BREAKOUT varchar(10),ITEM_ID int,BREAK_M int, LIKETHIS int)
insert into #t VALUES
(2411,'True',9290, 1 ,null)
,(2411,'False',9291, NULL ,null)
,(2411,'False',9292, NULL ,null)
,(2411,'False',9293, NULL ,null)
,(2411,'True',9300, 2 ,null)
,(2411,'False',9301, NULL ,null)
,(2411,'False',9302,NULL ,null)
,(2411,'False',9303,NULL ,null)
select ORDERNO ,BREAKOUT ,ITEM_ID ,t.BREAK_M
, ca.BREAK_M LIKETHIS from #t t
outer apply(select top 1 t1.BREAK_M
from #t t1 where t1.ITEM_ID<=t.ITEM_ID and t1.BREAK_M is not NULL
order by t1.ITEM_ID desc )ca
drop table #t