2015-02-24 140 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