2015-02-24 145 views
-1

我有一张包含百万条记录的表。以下是一组数据中的一个示例:SQL - 根据ID添加列值

select id, 
     id_depend, 
     Item, 
     values as 'Current Values' 
from mytable 
where id in (685690, 691282, 691297) 
order by 1 

enter image description here

第一个ID(685690)对应于第一移动,第二个(691282)取消所述第一运动和所述第三个是第一乐章的修正。 id_depend字段将移动与原始相关联。

我需要显示相同的数据,并添加一个新列,其中包含与最后一次移动相关的值。我的意思是,有时第一个动作(其他ID)是可行的,并且在此动作之后没有更正(例如:id 691371)。

enter image description here

回答

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 

请让我知道如果您有任何疑问。

+0

我认为这将起作用。谢谢 – 2015-02-25 00:24:14