sql中用CTE实现增加row_number()列

本文介绍如何在SQL中为表增加新列并默认赋值,利用公共表表达式(CTE)来更新该列的值。通过ROW_NUMBER()函数结合GETDATE()函数为新增加的ID列填充唯一值。

增加一列:

ALTER table table1 add id int default 0

用CTE更新创建的这个id列:

with CTE as
(
select *,rn=ROW_NUMBER() OVER(ORDER BY getdate())
from table1
)
update CTE set id= rn

补充CTE的定义

指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。该表达式源自简单查询,并且在单条 SELECT、INSERT、UPDATE 或 DELETE 语句的执行范围内定义。该子句也可用在 CREATE VIEW 语句中,作为该语句的 SELECT 定义语句的一部分。公用表表达式可以包括对自身的引用。这种表达式称为递归公用表表达式。

mismatched input 'repurchase' expecting {<EOF>, ';'}(line 59, pos 8) == SQL == create table orca01_dr_data.ads_rpt_mini_loyalty_customer_t_1124 stored as parquet as with repurchase as( select t1.re_no, concat(t2.last_name,t2.first_name) as customer_full_name, t1.new_vin_17, t1.brand_name, t1.re_status, t1.create_date, case when count(distinct vin_17) < count(vin_17) then '是' else '否' end as is_vin_17_duplicate, case when t1.category = '公司购车' then t1.company_name else null end as company_name_result from dwc.dwc_dim_com_membership2_bz_repurchase_full_t t1 left join dwc_dim_cus_membership2_customer_full_t t2 on t1.cop_id = t2.cop_id where t1.brand_name = 'mini' and t1.create_date >= '2025-10-01' ), ordercenter as ( select a1.paid_amount, vin.status as order_status ,vin.vin_17 as vin_17 ,concat(t4.last_name,t4.first_name) as concat_name ,concat(vin.vin_17,t2.dealer_code) as concat_vin ,t4.name as customer_full_name from dwc.dwc_fact_sal_ordercenter_core_order_full_t t1 left join dwc_fact_sal_ordercenter_payment_full_t a1 on t1.order_no = a1.order_no left join dwc.dwc_fact_sal_ordercenter_vehicle_fulfillment_full_t vin on t1.order_no=vin.order_no left join dwc.dwc_fact_sal_ordercenter_customer_full_t t4 on t1.order_no=t4.order_no and t1.cid=t4.cid and t4.type='vehicle_owner' and t4.deleted != 0 left join (select order_no,create_date,status,row_number() over(partition by order_no order by create_date asc nulls last ) as rk from dwc.dwc_fact_com_ordercenter_core_order_log_full_t where type = 'payment' ) log1 on t1.order_no=log1.order_no and log1.rk=1 where t1.business_type='nc' and t1.deleted != 0 ) select distinct t1.re_no, customer_full_name, t1.new_vin_17, t1.brand_name, t1.re_status, t1.create_date, is_vin_17_duplicate, company_name_result, a1.paid_amount, order_status, from t1 repurchase --------^^^ left join t2 ordercenter on t1.new_vin_17 = t2.vin_17 执行的SQL语句: ```sql create table orca01_dr_data.ads_rpt_mini_loyalty_customer_t_1124 stored as parquet as with repurchase as( select t1.re_no, concat(t2.last_name,t2.first_name) as customer_full_name, t1.new_vin_17, t1.brand_name, t1.re_status, t1.create_date, CASE WHEN COUNT(DISTINCT vin_17) < COUNT(vin_17) THEN '是' ELSE '否' END AS is_vin_17_duplicate, CASE WHEN t1.category = '公司购车' THEN t1.company_name ELSE NULL END AS company_name_result from dwc.dwc_dim_com_membership2_bz_repurchase_full_t t1 left join dwc_dim_cus_membership2_customer_full_t t2 on t1.cop_id = t2.cop_id where t1.brand_name = 'MINI' and t1.create_date >= '2025-10-01' ), ordercenter as ( select a1.paid_amount, vin.status as order_status ,vin.vin_17 as vin_17 ,concat(t4.last_name,t4.first_name) as concat_name ,concat(vin.vin_17,t2.dealer_code) as concat_vin ,t4.name as customer_full_name from dwc.dwc_fact_sal_ordercenter_core_order_full_t t1 left join dwc_fact_sal_ordercenter_payment_full_t a1 on t1.order_no = a1.order_no left join dwc.dwc_fact_sal_ordercenter_vehicle_fulfillment_full_t vin on t1.order_no=vin.order_no left join dwc.dwc_fact_sal_ordercenter_customer_full_t t4 on t1.order_no=t4.order_no and t1.cid=t4.cid and t4.type='VEHICLE_OWNER' and t4.deleted != 0 left join (select order_no,create_date,status,row_number() over(partition by order_no order by create_date asc nulls last ) as rk from dwc.dwc_fact_com_ordercenter_core_order_log_full_t where type = 'PAYMENT' ) log1 on t1.order_no=log1.order_no and log1.rk=1 where t1.business_type='NC' and t1.deleted != 0 ) select distinct t1.re_no, customer_full_name, t1.new_vin_17, t1.brand_name, t1.re_status, t1.create_date, is_vin_17_duplicate, company_name_result, a1.paid_amount, order_status, from t1 repurchase left join t2 ordercenter on t1.new_vin_17 = t2.vin_17
11-26
以下ORACLE的SQL语句存在错误,请修改成正确的SQL,并保留原SQL的注释。SQLWITH czzinfo AS( SELECT pwsr.WorkSegmentRequirement, to_char(pwsr.CREATED_ON, 'yyyy-MM-dd') "operatortime", u.NAME FROM PRODUCTIONWOMENTRESPONSE6635 pwsr LEFT JOIN PRODUCTIONOUTERIALACTUALCE23 poma ON poma.SOURCE_ID = pwsr.ID LEFT JOIN OUTPUTMATERIALACTUALSN omasn ON OMASN.SOURCE_ID = poma.ID LEFT JOIN "USER" u ON u.ID = pwsr.CREATED_BY_ID WHERE OMASN.RELATED_ID = 'mGgFHdeBLkvI8DmExEFgAA' ), jyzinfo AS( SELECT qitr.WorkSegmentRequirement, to_char(qitr.CREATED_ON, 'yyyy-MM-dd') "examinertime", u.NAME FROM QUALITYINSPECTIONTESTRECORD qitr LEFT JOIN "USER" u ON u.ID = qitr.CREATED_BY_ID WHERE qitr.SerialNumber = 'mGgFHdeBLkvI8DmExEFgAA' ) Select Distinct * from ( SELECT -- ROW_NUMBER() OVER (ORDER BY wsr.CODE) AS "serialnumber", wsr.CODE, WSR.NAME, CASE WHEN wsr.KeyProcesses = 1 THEN '☆本工序为关键工序' WHEN wsr.KeyProcesses != 1 AND WSR.NAME IN ('电测','PIND') THEN '通过' WHEN wsr.KeyProcesses != 1 AND WSR.NAME IN ='中转' THEN '转出人:'||u2.NAME ||' '||'接收人:'||u3.NAME ELSE wsr.Description END AS "recordrequirements", NVL(czzinfo.NAME, '') || '/' || NVL(czzinfo."operatortime", '') AS "operator", NVL(jyzinfo.NAME, '') || '/' || NVL(jyzinfo."examinertime", '') AS "examiner" FROM STANDARDPRODNWORKREQUEST5AFA spwr LEFT JOIN F_WORKSEGMENTREQUIREMENT wsr ON wsr.WorkRequest = SPWR.ID LEFT JOIN czzinfo ON czzinfo.WorkSegmentRequirement = wsr.ID LEFT JOIN jyzinfo ON jyzinfo.WorkSegmentRequirement = wsr.ID LEFT JOIN "USER" u2 ON wsr.StartWorkPerson=u2.PERSON LEFT JOIN "USER" u3 ON wsr.FINISHEDWORKPERSON=u3.PERSON WHERE spwr.ID = 'L6bAbr4Uw3OPhEWus3qFvw' ) src ORDER BY src.CODE ASC
08-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值