2

C#をコーディングしたasp.netプロジェクトがあります。私はこのようなテーブルを持っています。

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

ここで私はこのような問題を抱えています; その2つのセルの加算を計算し、それを60で割って、正しいセルに書き込む必要があります。

例えば; MikeFMINとMikeFMOUTの加算を計算する必要があり、それをMikeFM_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

あなたの助けを待ってください。私は本当にそれをする必要があります。

どうもありがとうございます。

4

2 に答える 2

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'
于 2013-02-23T16:42:28.653 に答える
0

これは、 selectusing関数のsql-fiddle-demoです。sql-server2005以降をサポートしているsum() overと思います。

インラインSQLではなく、ストアドプロシージャでこれを行う方がよいと思います。

sql-fiddle-demoの場合UPDATE

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 |
于 2013-02-23T17:02:08.830 に答える