我有一个编码C#的asp.net项目。 我有一张这样的桌子;
NAME WORK_TYPE FM FM_HOUR
-------------------------------------------------
Mike IN -2800
Mike OUT 3400 ??
Jane IN 400
Jane OUT -100 ??
我有这样的问题;我需要计算这两个细胞的加法并将其除以60并将其写入右侧细胞。
例如;我需要计算Mike FM IN和Mike FM OUT的添加,我需要将它写入Mike FM_HOUR单元格。
我该怎么做?
我写了这段代码,但它当然没有用,只是为了帮助你;
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 :(得分: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'
答案 1 :(得分:0)
以下是使用sum() over
函数的select的sql-fiddle-demo。我认为它支持sql-server 2005及以上版本。
我认为你最好在存储过程而不是内联sql中执行此操作。
UPDATE
sql-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 |