1

私はこのSQLクエリを書きました

update temp_calpoints1  
set perwet = (select perwet
              from process 
              where processid = temp_calpoints1.processid) 

現在のところ、以下のようにすべてのユーザーに対して10パーセント更新されます。

orderid            processid          uid            ordervalue            perwet
---------------------------------------------------------------------------------    
1                     1                1               10000              10
1                     1                2               10000              10
1                     1                3               10000              10
1                     2                1               10000              10
1                     2                2               10000              10
1                     3                1               10000              10

複数のユーザーが同じ順序で1つのプロセスに関与している場合は、パーセントを均等に分割する必要があります

つまり、このように挿入する必要があります

orderid        processid             uid         ordervalue          perwet
------------------------------------------------------------------------------    
1                    1                1               10000             3.33 
1                     1               2               10000             3.33
1                     1               3               10000             3.33
1                     2               1               10000             5.00
1                     2               2               10000             5.00
1                     3               1               10000            10.00

何か案が?

テーブルの構造

     CREATE TABLE [dbo].[temp_calpoints1](
     [orderid] [int] NULL,
     [processid] [int] NULL,
     [uid] [int] NULL,
     [ordervalue] [bigint] NULL,
     [perwet] [float] NULL
     ) ON [PRIMARY]



     CREATE TABLE [dbo].[process](
     [processid] [float] NULL,
     [processdesc] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [perwet] [int] NULL
     ) ON [PRIMARY]
4

4 に答える 4

0

あなたはこのように試みるかもしれません

update t set perwet = ((select perwet from process where processid = t.processid)  
/(select count(uid) from temp_calpoints1 group by orderid,processid having processid = 
t.processid AND orderid=t.orderid )) from temp_calpoints1 t;

SQLフィドル

于 2013-03-20T06:59:02.113 に答える
0
update temp_calpoints1 set perwet = processcallpoints.perwet
from (select MAX(process.perwet) / COUNT(1) perwet from temp_calpoints1 inner join process on temp_calpoints1.processid = process.processid group by process.processid) processcallpoints

ちなみに、3.33 はカラム型が int なので 3 にはなりません。

于 2013-03-20T06:17:52.220 に答える
0
update temp_calpoints1  set perwet = (select perwet/count(uid)
  from process 
  where 
  processid=temp_calpoints1.processid group by uid)
于 2013-03-20T05:16:24.540 に答える
0

そんな感じ:

SQLFIDDLE例

UPDATE temp_calpoints1  
SET perwet = (SELECT p.perwet/(SELECT CASE WHEN count(*) = 0
                                      THEN 1 ELSE count(*) * 1.00  END
                             FROM temp_calpoints1 t2
                             WHERE t2.processid = temp_calpoints1.processid)
              FROM  process p 
              WHERE p.processid = temp_calpoints1.processid) 

結果:

| ORDERID | PROCESSID | UID | ORDERVALUE | PERWET |
---------------------------------------------------
|       1 |         1 |   1 |      10000 |   3.33 | 
|       1 |         1 |   2 |      10000 |   3.33 |
|       1 |         1 |   3 |      10000 |   3.33 | 
于 2013-03-20T06:48:24.143 に答える