我有一张包含百万条记录的表格。以下是一组数据的示例:
select id,
id_depend,
Item,
values as 'Current Values'
from mytable
where id in (685690, 691282, 691297)
order by 1
第一个id(685690)对应于第一个移动,第二个id(691282)取消第一个移动,第三个id是第一个移动的校正。 id_depend 字段将动作与原始动作相关联。
我需要显示相同的数据,添加一个新列,其中包含最后一个相关运动的值。我的意思是,有时第一个动作(其他ids)是严格的,并且在这个动作之后没有更正(例如:id 691371)。
答案 0 :(得分:1)
如果我理解正确的话,这会有所帮助:
SELECT m.id,m.id_depend,m.Item,m.[values] [Current Values]
,CASE WHEN m.id_depend = 0 AND NOT EXISTS(SELECT 1 FROM mytable cor WHERE cor.id_depend = m.id)
THEN m.[values]
ELSE COALESCE((SELECT SUM(mt.[values]) FROM mytable mt WHERE mt.Item = m.Item AND mt.id < m.id)+m.[values],0)
END [Values Required]
FROM mytable m
还有我的查询:
CREATE TABLE #mytable (id BIGINT, id_depend BIGINT, Item VARCHAR(50), [values] DECIMAL(23,10))
INSERT INTO #mytable (id,id_depend,Item,[values])VALUES(685690,0,'1',216),(685690,0,'2',108)
,(691282,685690,'1',-216),(691282,685690,'2',-108)
,(691297,685690,'1',324),(691297,685690,'2',162)
,(691371,0,'1',100),(691371,0,'2',200),(691371,0,'3',300)
SELECT m.id,m.id_depend,m.Item,m.[values] [Current Values]
FROM #mytable m
SELECT m.id,m.id_depend,m.Item,m.[values] [Current Values]
,CASE WHEN m.id_depend = 0 AND NOT EXISTS(SELECT 1 FROM #mytable cor WHERE cor.id_depend = m.id)
THEN m.[values]
ELSE COALESCE((SELECT SUM(mt.[values]) FROM #mytable mt WHERE mt.Item = m.Item AND mt.id < m.id)+m.[values],0)
END [Values Required]
FROM #mytable m
DROP TABLE #mytable
如果您有任何疑问,请与我们联系。