<sub id="jd1jz"><var id="jd1jz"></var></sub>

<sub id="jd1jz"><var id="jd1jz"><output id="jd1jz"></output></var></sub><address id="jd1jz"></address>

<address id="jd1jz"><dfn id="jd1jz"></dfn></address>

    <address id="jd1jz"><dfn id="jd1jz"></dfn></address><address id="jd1jz"><var id="jd1jz"></var></address><address id="jd1jz"><dfn id="jd1jz"></dfn></address>

    <address id="jd1jz"><dfn id="jd1jz"></dfn></address>

        案例:利用sql批量更新部分时间的同比数据

        问题:如何将social_kol_tmp表 中的字段cost_YA中日期为201901-201909中的值替换为相同brand和pltform对应18年月份的col_cost字段的数据,其他日期的cost_Y值不变?

        假设:social_kol_tmp表 A,social_kol_tmp表B

        难点:可以利用join on brand和pltform相等,但是日期如何匹配呢?

        思路:通过对18年各月和对应19年的各个月份产生相应的字段,rn1和rn2

        注意,理论上结果中同一行两个时间只相差一年

        分享图片

        方案一:窗口函数生成rn1和rn2(结果需要看数据情况,原因如下)

        1. 代码如下:

        select a.brand,a.platform,a.period as Adt,b.period as Bdt,a.col_cost,b.col_cost as cost_YNew

        from (select col_cost,brand,platform,period,dense_rank() over (partition by brand,platform order by period) as rn1

          from social_kol_tmp

          where period>=‘201901‘ and period<‘201909‘

              ) a

         join

         ( select col_cost,brand,platform,period,dense_rank() over (partition by brand,platform order by period ) as rn2

           from social_kol_tmp

           where period>=‘201801‘ and period<‘201809‘

         ) b

        on a.rn1=b.rn2 and a.brand=b.brand and a.platform=b.platform

        2. 出现的问题:部分时间不对应

        注意,理论上结果中同一行两个时间只相差一年

         分享图片

        3 .原因分析:

        某个品牌的某一平台的数据不是每个月都有,排序产生的字段rn1和rn2出了问题,未按照对应的月份排序。

        方案二:case when 生成rn1rn2(成功)

        1. 代码如下:

        select a.brand,a.platform,a.period as Adt,b.period as Bdt,a.col_cost,b.col_cost as cost_YNew

        from (select col_cost,brand,platform,period,

                    case when period=‘201901‘ then ‘1‘

                            when period=‘201902‘ then ‘2‘

                            when period=‘201903‘ then ‘3‘

                            when period=‘201904‘ then ‘4‘

                            when period=‘201905‘ then ‘5‘

                            else period

                       end as rn1        

                  from social_kol_tmp

                 where period>=‘201901‘ and period<‘201909‘

              ) a

         join

         ( select col_cost,brand,platform,period,

                    case when period=‘201801‘ then ‘1‘

                            when period=‘201802‘ then ‘2‘

                            when period=‘201803‘ then ‘3‘

                            when period=‘201804‘ then ‘4‘

                            when period=‘201805‘ then ‘5‘

                       else period

                end as rn2

           from social_kol_tmp

           where period>=‘201801‘ and period<‘201809‘

         ) b

        on a.rn1=b.rn2 and a.brand=b.brand and a.platform=b.platform

        2.结果如下:

         分享图片

        检验:

        • Adt和Bdt的日期月份是对应的
        • 表中的数据Adt对应的col_cost是以1开头的,Bd对应的是以2开头的,故数据校验成功

        sql中实现数据更新的方法

        参考如下(sqlsever):

        1.创建一个表,sMedia.social_kol_tmp_new 201901-201909中的kol_cost替换为对应18年月份的数据

        Create table sMedia.social_kol_tmp_new as

        select a.brand,a.platform,a.period as Adt,b.period as Bdt,a.kol_cost,b.kol_cost as cost_YNew

        from (select kol_cost,brand,platform,period,

                    case when period=‘201901‘ then ‘1‘

                 when period=‘201902‘ then ‘2‘

                 when period=‘201903‘ then ‘3‘

                 when period=‘201904‘ then ‘4‘

                 when period=‘201905‘ then ‘5‘

                 when period=‘201906‘ then ‘3‘

                when period=‘201907‘ then ‘4‘

                when period=‘201908‘ then ‘5‘

                when period=‘201909‘ then ‘5‘

                else period

           end as rn1 

            from Media.social_kol_tmp_new 

           where period>=‘201901‘ and period<‘201909‘ 

              ) a

         join 

         ( select kol_cost,brand,platform,period,

                    case when period=‘201801‘ then ‘1‘

                when period=‘201802‘ then ‘2‘

                when period=‘201803‘ then ‘3‘

                when period=‘201804‘ then ‘4‘

                 when period=‘201805‘ then ‘5‘

                 when period=‘201806‘ then ‘6‘

                when period=‘201807‘ then ‘7‘

                when period=‘201808‘ then ‘8‘

                when period=‘201809‘ then ‘9‘

               else period

              end as rn2

           from Media.social_kol_tmp_new  

           where period>=‘201801‘ and period<‘201809‘ 

         ) b

        on a.rn1=b.rn2 and a.brand=b.brand and a.platform=b.platform

         2.sMedia.social_kol_tmp 更新新数据

        update sMedia.social_kol_tmp 

        set cost_YA= cost_YNew

        from  sMedia.social_kol_tmp a,Media.social_kol_tmp_new b

        where a.period=b.Adt

        相关文章
        相关标签/搜索
        381818香港藏宝阁资料 越西县| 青田县| 孟村| 潢川县| 手游| 清镇市| 山西省| 资讯| 通江县| 邢台市| 蚌埠市| 万安县| 平遥县| 镇康县| 邹城市| 霍邱县| 麻城市| 栾城县| 彰化市| 大余县| 平南县| 紫云| 凤台县| 汕尾市| 丹巴县| 扶风县| 壤塘县| 滁州市| 金秀| 溧阳市| 玛纳斯县| 镇安县| 霍邱县| 绥宁县| 彭水| 长葛市| 兴和县| 瑞昌市| 阳朔县| 郁南县| 喜德县| 麦盖提县| 通辽市| 元朗区| 山东省| 望城县| 玉龙| 兰西县| 巴塘县| 航空| 宜良县| 绥滨县| 石首市| 吴川市| 南丹县| 开远市| 湟中县| 临泉县| 嵩明县| 宜都市| 保定市| 蓬溪县| 鄯善县| 望城县| 布尔津县| 衡东县| 济源市| 彭泽县| 香港| 理塘县| 永春县| 浮山县| 瓮安县| 东莞市| 舞阳县| 额敏县| 神农架林区| 五莲县| 周至县| 盈江县| 紫阳县| 聂荣县| 清镇市| 嘉峪关市| 祁连县| 玉山县| SHOW| 陕西省| 汝阳县| 喀喇| 汝城县| 安化县| 五家渠市| 泰顺县| 吉安市| 绥化市| 米脂县| 景洪市| 巴彦县| 剑川县| 上饶县| 宁武县| 五大连池市| 六枝特区| 仙桃市| 榕江县| 新疆| 申扎县| 娱乐| 永康市| 建宁县| 行唐县| 高州市| 沙洋县| 介休市| 荣昌县| 娄烦县| 上杭县| 资中县| 海晏县| 灵寿县| 衡水市| 明溪县| 大竹县| 屯昌县| 平武县| 连云港市| 沾化县| 裕民县| 获嘉县| 贡山| 屯昌县| 芦溪县| 牟定县| 白沙| 花垣县| 四川省| 什邡市| 北碚区| 大田县| 迁西县| 聂拉木县| 辽阳市| 天柱县| 阳东县| 徐水县| 来宾市| 岚皋县| 文水县| 安泽县| 闵行区| 东乡县| 逊克县| 松阳县| 株洲县| 遂平县| 洪湖市| 喀喇沁旗| 济宁市| 平山县| 北流市| 克拉玛依市| 南漳县| 青川县| 麻阳| 潮州市| 邵阳市| 鱼台县| 乐业县| 汨罗市| 庆云县| 齐齐哈尔市| 嘉兴市| 奇台县| 宜黄县| 平凉市| 塔河县| 安仁县| 祁连县| 万全县| 安溪县| 苍南县| 婺源县| 新民市| 林周县| 南安市| 平安县| 石门县| 西青区| 美姑县| 常州市| 万盛区| 阜城县| 永兴县| 泽普县| 玛纳斯县| 临邑县| 达州市| 定日县| 海晏县| 余庆县| 隆安县| 金堂县| 大余县| 霍州市| 都江堰市| 辛集市| 封丘县| 汝阳县| 遂宁市| 阿城市| 宜州市| 黎平县| 肃宁县| 兴安盟| 包头市| 晋州市| 麦盖提县| 台前县| 木兰县| 察哈| 高陵县| 藁城市| 富阳市| 金昌市| 沁水县| 含山县| 禹州市| 寿光市| 上林县| 石门县| 赤峰市| 罗甸县| 湘乡市| 安溪县| 翼城县| 大竹县| 明水县| 屏东市| 桦南县| 胶南市| 遂溪县| 临西县| 石狮市| 英山县| 松滋市| 东明县| 繁昌县| 太仆寺旗| 宁乡县| 北宁市| 万州区| 西乌珠穆沁旗| 中山市| 武清区| 辽阳市| 鞍山市| 和龙市| 获嘉县| 台山市| 云梦县| 修武县| 改则县| 米易县| 南召县| 苗栗市| 平昌县| 古交市| 宁乡县| 西乡县| 江城| 福贡县| 拉萨市| 海兴县| 中牟县| 呈贡县| 平江县| 含山县| 太湖县| 都昌县| 新河县| 天峻县| 江永县| 武威市| 兖州市| 青铜峡市| 收藏| 亚东县| 新和县| 进贤县| 玉田县| 肥西县| 无锡市| 香港| 苍溪县| 济源市| 明溪县| 方正县| 巩留县| 周口市| 乌恰县| 余干县| 巴中市| 河西区| 周宁县| 明溪县| 宿松县| 阜南县| 安吉县| 黄骅市| 扬中市| 城市| 金溪县| 板桥市| 龙陵县| 江西省| 闸北区| 凤翔县| 乌拉特前旗| 江达县| 陈巴尔虎旗| 栖霞市| 宁乡县| 蓬溪县| 思茅市| 内江市| 万安县| 石城县| 土默特左旗| 静乐县| 和硕县| 卫辉市| 伊宁县| 淄博市| 清原| 峨边| 曲靖市| 花莲县| 凉城县| 永年县| 建瓯市| 万全县| 微博| 中山市| 松滋市| 靖宇县| 邢台市| 渝北区| 东丰县| 古蔺县| 华坪县| 哈尔滨市| 石首市| 柞水县| 河北区| 永年县| 崇礼县| 尚志市| 新源县| 永胜县| 安仁县| 兰考县| 陵川县| 大渡口区| 玉门市| 威海市| 施秉县| 天津市| 西丰县| 鄂州市| 浪卡子县| 蓝田县| 徐水县| 肇源县| 宁都县| 宝应县| 三门县| 岢岚县| 巴中市| 闵行区| 宣汉县| 运城市| 云南省| 根河市| 和平县| 深水埗区| 侯马市| 黄浦区| 忻州市| 呼伦贝尔市| 敦化市| 延寿县| 柏乡县| 龙里县| 阳山县| 泰宁县| 庆阳市| 武城县| 新疆| 攀枝花市| 阿图什市| 昌黎县| 金沙县| 肃南| 当雄县| 元谋县| 牟定县| 宜良县| 留坝县| 巴塘县| 泰宁县| 饶阳县| 上思县| 盘锦市| 巫溪县| 陵川县| 连州市| 旬阳县| 阿拉善盟| 永定县| 罗田县| 兴海县| 霍城县| 兴海县| 蕲春县| 东海县| 公主岭市| 金川县| 鲁山县| 南通市| 澄城县| 政和县| 梁平县| 奉贤区| 清丰县| 夏津县| 黄冈市| 红河县| 聂荣县| 理塘县| 岳阳市| 利川市| 原平市| 武功县| 横峰县| 乌兰察布市| 麦盖提县| 颍上县| 班戈县| 诸暨市| 合川市| 台中市| 休宁县| 汝南县| 宜兴市| 左云县| 玛纳斯县| 丽江市| 修文县| 仁化县| 如东县| 泾源县| 石城县| 甘谷县| 肇东市| 普定县| 三都| 中卫市| 图木舒克市| 泰和县| 郓城县| 社旗县| 曲靖市| 彭阳县| 布拖县| 高密市| 徐闻县| 新建县| 澜沧| 琼中| 竹山县| 称多县| 临湘市| 宜川县| 平阳县| 垫江县| 丹凤县| 城步| 德江县| 手游| 长宁县| 邵阳市| 修水县| 汾西县| 开远市| 岳阳县| 长春市| 个旧市| 海伦市| 南华县| 兴城市| 高要市| 罗江县| 彝良县| 呼伦贝尔市| 洛扎县| 仪陇县| 渝中区| 桑日县| 黔西县| 扬中市| 伊宁市| 梅州市| 宿迁市| 德江县| 寿阳县| 沾益县| 西乌珠穆沁旗| 通渭县| 涿州市| 大庆市| 南岸区| 浠水县| 仁化县| 兰溪市| 双鸭山市| 三河市| 延长县| 尉氏县| 赤城县| 祥云县| 南陵县| 类乌齐县| 舞钢市| 文化| 栾城县| 望奎县| 巨野县| 日喀则市| 甘德县| 荔波县| 雷波县| 浏阳市| 江永县| 会昌县| 前郭尔| 什邡市| 扶余县| 无极县| 丹江口市| 专栏| 乐亭县| 扬中市| 商城县| 陆川县| 昌都县| 台南县| 越西县| 崇左市| 德兴市| 岳西县| 抚顺县| 云林县| 中江县| 靖西县| 太原市| 陆丰市| 克什克腾旗| 丘北县| 印江| 中阳县| 龙游县| 招远市| 勃利县| 平潭县| 封丘县| 望江县| 曲麻莱县| 陕西省| 肥城市| 明水县| 龙陵县| 南岸区| 锦州市| 丁青县| 抚顺县| 遂川县| 常德市| 石泉县| 元氏县| 出国| 壤塘县| 宜宾县| 泸溪县| 安庆市| 忻州市| 岚皋县| 南澳县| 论坛| 德安县| 青海省| 大新县| 唐山市| 永定县| 黎川县| 沈丘县| 六盘水市| 城固县| 咸阳市| 永善县| 崇信县| 商洛市| 堆龙德庆县| 墨玉县| 临沂市| http://m.jx1870clubv.fun http://m.jx1870creazv.fun http://wap.jx1870approachv.fun http://3g.jx1870doctorv.fun http://3g.jx1870discussv.fun http://3g.jx1870attackv.fun http://www.jx1870datev.fun http://wap.jx1870catv.fun http://m.jx1870bikev.fun http://m.jx1870arzv.fun http://m.jx1870carryv.fun http://m.jx1870auditv.fun http://wap.jx1870attezptv.fun http://m.jx1870binv.fun http://wap.jx1870aidv.fun http://3g.jx1870codev.fun http://m.jx1870alertv.fun http://www.jx1870connectv.fun