如何在单个语句中的SQL中执行此操作?

Kry*_*ten 2 mysql sql

我有以下MySQL表:

+---------+------------+------+--------+------+---------+------------+-------+---------+----------+------------+------------+
| Version | Yr_Varient | FY   | Period | CoA  | Company | Item       | Mvt   | Ptnr_Co | Investee | GC         | LC         |
+---------+------------+------+--------+------+---------+------------+-------+---------+----------+------------+------------+
| 201     | 1          | 2010 | 1      | 11   | 23      | 1110105000 | 60200 |         |          | 450000     | 450000     |
| 201     | 1          | 2010 | 1      | 11   | 23      | 2110300000 | 60200 |         |          | -520000    | -520000    |
| 201     | 1          | 2010 | 1      | 11   | 23      | 1220221600 |       |         |          | 78080      | 78080      |
| 201     | 1          | 2010 | 1      | 11   | 23      | 2130323000 |       |         |          | 50000      | 50000      |
| 201     | 1          | 2010 | 1      | 11   | 23      | 2130322000 |       |         |          | -58080     | -58080     |
| 201     | 1          | 2010 | 1      | 11   | 23      | 3100505000 |       |         |          | -275000    | -275000    |
| 201     | 1          | 2010 | 1      | 11   | 23      | 3200652500 |       |         |          | 216920     | 216920     |
| 201     | 1          | 2010 | 1      | 11   | 23      | 3900000000 |       |         |          | 58080      | 58080      |
| 201     | 1          | 2010 | 1      | 11   | 26      | 1110105000 | 60200 |         |          | 376000     | 376000     |
| 201     | 1          | 2010 | 1      | 11   | 26      | 2110300000 | 60200 |         |          | -545000    | -545000    |
| 201     | 1          | 2010 | 1      | 11   | 26      | 1220221600 |       |         |          | 452250     | 452250     |
| 201     | 1          | 2010 | 1      | 11   | 26      | 2130323000 |       |         |          | -165000    | -165000    |
| 201     | 1          | 2010 | 1      | 11   | 26      | 2130322000 |       |         |          | -118250    | -118250    |
| 201     | 1          | 2010 | 1      | 11   | 26      | 3100505000 |       |         |          | -937750    | -937750    |
| 201     | 1          | 2010 | 1      | 11   | 26      | 3200652500 |       |         |          | 819500     | 819500     |
| 201     | 1          | 2010 | 1      | 11   | 26      | 3900000000 |       |         |          | 118250     | 118250     |
| 201     | 1          | 2010 | 1      | 11   | 37      | 1110105000 | 60200 |         |          | 777000     | 777000     |
| 201     | 1          | 2010 | 1      | 11   | 37      | 2110308000 | 60200 | 43      |          | -255000    | -255000    |
| 201     | 1          | 2010 | 1      | 11   | 37      | 2130321500 |       |         |          | 180000     | 180000     |
| 201     | 1          | 2010 | 1      | 11   | 37      | 2130322000 |       |         |          | -77000     | -77000     |
| 201     | 1          | 2010 | 1      | 11   | 37      | 2310407001 |       | 1       |          | -625000    | -625000    |
| 201     | 1          | 2010 | 1      | 11   | 37      | 3100505000 |       |         |          | -2502500   | -2502500   |
| 201     | 1          | 2010 | 1      | 11   | 37      | 3200652500 |       |         |          | 2425500    | 2425500    |
| 201     | 1          | 2010 | 1      | 11   | 37      | 3900000000 |       |         |          | 77000      | 77000      |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1110105000 | 60200 |         |          | 2600000    | 2600000    |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1140161000 | 60200 |         | 23       | 430000     | 430000     |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1140161000 | 60200 |         | 26       | 505556     | 505556     |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1140160000 | 60200 | 37      |          | 255000     | 255000     |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1160163000 | 60200 | 99999   | 48       | 49428895   | 49428895   |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1160163000 | 60200 | 99999   | 49       | 188260175  | 188260175  |
| 201     | 1          | 2010 | 1      | 11   | 43      | 2310405500 |       |         |          | -237689070 | -237689070 |
| 201     | 1          | 2010 | 1      | 11   | 43      | 2110300000 | 60200 |         |          | -1000      | -1000      |
| 201     | 1          | 2010 | 1      | 11   | 43      | 2110300500 | 60200 |         |          | -3999000   | -3999000   |
| 201     | 1          | 2010 | 1      | 11   | 43      | 1220221600 |       |         |          | 1571112    | 1571112    |
| 201     | 1          | 2010 | 1      | 11   | 43      | 2130321500 |       |         |          | -805556    | -805556    |
| 201     | 1          | 2010 | 1      | 11   | 43      | 2130322000 |       |         |          | -556112    | -556112    |
| 201     | 1          | 2010 | 1      | 11   | 43      | 3100505000 |       |         |          | -836000    | -836000    |
| 201     | 1          | 2010 | 1      | 11   | 43      | 3200652500 |       |         |          | 781000     | 781000     |
| 201     | 1          | 2010 | 1      | 11   | 43      | 3300715700 |       | 99999   | 32       | -440000    | -440000    |
| 201     | 1          | 2010 | 1      | 11   | 43      | 3300715700 |       | 99999   | 26       | -61112     | -61112     |
| 201     | 1          | 2010 | 1      | 11   | 43      | 3900000000 |       |         |          | 556112     | 556112     |
+---------+------------+------+--------+------+---------+------------+-------+---------+----------+------------+------------+

我需要获取Mvt = 60200的所有行,并将该行中的每个GC和LC记录乘以1.1并将包含更改的新行添加回同一个表中,并将FY设置为2011.

我怎么能在一个声明中做到这一切?
是否有可能在1个语句中完成所有这些(我对SQL知之甚少)?
这可以在标准SQL中完成,因为数据库将移植到另一个数据库服务器吗?
我不知道它将是哪个服务器.

pax*_*blo 9

在标准SQL中(在特定于供应商的实现中可能有更好的方法,但我倾向于在可能的情况下更喜欢标准的东西):

insert into mytable (
    Version, Yr_Varient, Period, CoA, Company, Item, Mvt, Ptnr_Co, Investee,
    FY, GC, LC
) select
    Version, Yr_Varient, Period, CoA, Company, Item, Mvt, Ptnr_Co, Investee,
    2011, GC*1.1, LC*1.1
    from mytable
    where Mvt = 60200
    -- and FY = 2010
Run Code Online (Sandbox Code Playgroud)

您可能还希望根据测试结果稍微限制您的选择语句,例如取消注释and FY = 2010上面的行以停止复制所有2009和2008数据(如果有的话).我asume你只是想发扬上年的东西上增加了10%GCLC.

其工作原理是运行select于这使修改后的数据FY,GCLC根据您的要求,和泵所有行回insert.