我有以下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中完成,因为数据库将移植到另一个数据库服务器吗?
我不知道它将是哪个服务器.
在标准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%GC和LC.
其工作原理是运行select于这使修改后的数据FY,GC并LC根据您的要求,和泵所有行回insert.