我有2张桌子;第一张表的设计如下:
表1 :
id_Doc_line_sheet (pk),Autonumber
DocNo (text)
lineNo (text)
Sheet No (text)
字段组合(DocNo,lineNo,Sheet No)是索引和唯一。
第二张表的设计如下:
表2 :
id_Doc_line_trans (pk), Autonumber
id_Doc_line_sheet (fk),Number
name
现在在table1中,对于field lineNo,我有带前导空格的记录,没有前导空格,如下所示:
id_Doc_line_sheet DocNo lineNo Sheet No
------------------------------------------------------------------
1001 doc-0001 line-0001 1
1002 doc-0001 line-0001 1
1003 doc-0001 line-0001 2
1004 doc-0001 line-0001 2
1005 doc-0002 line-0002 1
1006 doc-0002 line-0002 1
1007 doc-0001 line-0005 1
1008 doc-0001 line-0005 1
我希望用前导空格删除这些记录,但首先我想为每个唯一(DocNo,lineNo,Sheetno)更新(id_Doc_line_sheet)以更正一个(没有前导空格)。 我的意思是如果table2如下所示:
id_Doc_line_trans id_Doc_line_sheet name
---------------------------------------------------
1 1001 name01
2 1002 name02
3 1003 name03
4 1004 name04
5 1007 name07
6 1008 name08
我将(id_Doc_line_sheet)更新为以下内容:
id_Doc_line_trans id_Doc_line_sheet name
---------------------------------------------------
1 1001 name01
2 1001 name02
3 1003 name03
4 1003 name04
5 1007 name07
6 1007 name08
然后从第一个表中删除带有前导空格的记录。
请帮助我怎么做?
答案 0 :(得分:2)
根据我的理解,您似乎希望根据所使用的table2
首先sheet_no
更新id
。如果是这样,您可以使用以下内容:
<强>解释强>
table1
cte sheet_no
获取report
中的第一条记录
sheet_no
table2
table2
row_number =1
条目
醇>
<强>查询强>
;with report as(
select row_number() over(partition by sheet_no order by id_doc_line_sheet) as [Row],id_doc_line_sheet,sheet_no
from table1
where line_no not like ' %' -- here you can ensure that lin_no doesn't start with leading space
), combined as(
select t2.id_doc_line_trans,
t2.id_doc_line_sheet,
t1.sheet_no
from table2 t2
inner join table1 t1 on t2.id_doc_line_sheet = t1.id_doc_line_sheet
)
update t set t.id_doc_line_sheet = r.id_doc_line_sheet
from report r
inner join combined c on r.sheet_no = c.sheet_no
inner join table2 t on t.id_doc_line_trans = c.id_doc_line_trans
where r.[Row]=1
更新table2
后的结果
id_doc_line_trans id_doc_line_sheet name
1 1001 name01
2 1001 name02
3 1003 name03
4 1003 name04
然后您可以根据您的要求应用删除声明
这是一个有效的demo
希望这会对你有所帮助
答案 1 :(得分:2)
这是一种不使用分析函数的方法,这是在我脑海中解决这个问题的最简单方法。我们可以聚合超过survey_df
并使用和不使用前导空格来转出记录的id。此外,我们可以检查以确保给定的文档/表格甚至出现这样的页面。然后,我们需要做的就是将table1
加入到第一个CTE中,以便在一个记录中获取旧的和新的id值。
table2
请注意,更新逻辑很简单;所有感兴趣的信息和记录已经包含在第二个CTE中。