2013-02-23 64 views
1

我有一個編碼爲C#的asp.net項目。 我有這樣的桌子;根據條件計算兩個單元格

NAME  WORK_TYPE  FM   FM_HOUR 
------------------------------------------------- 
Mike   IN   -2800     
Mike   OUT   3400    ?? 
Jane   IN    400 
Jane   OUT   -100    ?? 

在這裏我有這樣的問題;我需要計算2個單元格的添加並將其與60分隔並寫入右側單元格。

例如;我需要計算Mike FM IN和Mike FM OUT的加法,並且我需要將它寫入Mike FM_HOUR cell。

我該怎麼做?

我寫了這段代碼,但它不工作,當然,只是爲了幫助你;

SqlConnection conn; 
    SqlCommand cmd = new SqlCommand(); 
    string strSQL = "UPDATE bilgiler3 SET FM_HOUR= SELECT SUM((FM WHERE WORK_TYPE='OUT') + (FM WHERE WORK_TYPE='IN'))/60 " 
    string bag_str = WebConfigurationManager.ConnectionStrings["asgdb01ConnectionString"].ConnectionString; 
    conn = new SqlConnection(bag_str); 
    conn.Open();...... and goes like this 

請等待你的幫助。 我需要這樣做。

非常感謝。

+0

是否有任何其他列除了'NAME','WORK_TYPE','FM','FM_HOUR' ? – 2013-02-23 16:31:49

+0

是否會有同一用戶的多組輸入/輸出行?什麼時候只有一個(或只有一個)? – 2013-02-23 16:47:36

回答

0

這裏爲選擇使用sum() over功能的sql-fiddle-demo。我認爲它支持sql-server 2005及以上。

我想你最好在存儲過程而不是內聯sql中執行此操作。

對於UPDATEsql-fiddle-demo

update T1 set T1.fm_hour = T2.fm_hour 
from T T1 join (Select distinct name,sum(fm) over (partition by name)/60 fm_hour 
       from T) T2 on T1.name = T2.name 
where T1.work_type = 'out' 

對於SELECT

Select name,work_type,fm, 
     case work_type 
      when 'out' then sum(fm) over (partition by name)/60 
      else null end fm_hour 
from yourTable 

| NAME | WORK_TYPE | FM | FM_HOUR | 
-------------------------------------- 
| Jane |  IN | 400 | (null) | 
| Jane |  OUT | -100 |  5 | 
| Mike |  IN | -2800 | (null) | 
| Mike |  OUT | 3400 |  10 | 
+0

在你的'update'例子中,'join'將爲每個名稱返回多行。所以你的更新可能多次更新一行。 – Andomar 2013-02-23 17:35:58

+0

@Andomar,true,用獨特的更新。 tnx – Kaf 2013-02-23 17:40:04

+0

感謝您的回答。卜(按名稱劃分)這邊是什麼?我應該寫什麼? – 2013-02-23 21:58:44

1

這應該產生所期望的輸出:

UPDATE bilgiler3 SET FM_HOUR= T.Result 
FROM (
    SELECT Name , SUM(FM)/60 AS Result 
    FROM bilgiler3 
    GROUP BY Name 
) T 
INNER JOIN bilgiler3 ON T.Name = bilgiler3.Name 
WHERE bilgiler3.Work_Type = 'OUT' 
相關問題