根据与SQL中其他表的重合,来自同一字段的合并行?

问题描述 投票:0回答:1

我尝试从表caracter上载字段t1时遇到问题。如果要在caracterfrase中显示该值,请与前一个值合并。例如,如果在t2中找到x,y或z,并且这些值出现在caracterfrase中,则我想将x,y和z与t2中的上一个值合并。

t1

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9TM3RNMy5wbmcifQ==” alt =“在此处输入图像说明”>“ >>

t2

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9weVp6Ny5qcGcifQ==” alt =“在此处输入图像描述”>

这应该是结果

t1

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS85Z2pHTi5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

我尝试了一个游标,但由于我在set处引用错误,因此无法正常工作,以前我尝试了while循环,但结果相同。

caracter

我在尝试从表t1上传田野角色时遇到问题。我想从caracter中获取该值,如果它在t2的frase中出现,则为先前的值。例如,如果找到x,y或...

希望这达到目的,您必须利用lead()聚合函数来获取下一行。您可以在带有表和记录的dbfiddle链接中找到完整的解决方案,以显示查询的工作方式。该解决方案适用于SQLSEVER 2019。 DECLARE @frase VARCHAR (100) DECLARE MICURSOR CURSOR FOR SELECT caracter FROM t1 OPEN MICURSOR FETCH NEXT FROM MICURSOR WHILE @@fetch_status = 0 BEGIN SELECT t1.caracter FROM t1 INNER JOIN t2 ON t2.frase LIKE CONCAT('%', t1.caracter,'%') UPDATE t1 SET caracter= 'caracter' + '(@frase-1)' FETCH NEXT FROM MICURSOR INTO @frase END CLOSE MICURSOR DEALLOCATE MICURSOR

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=71510d727bb04478383887e2e8ab3a52

应用脚本后的输出,

update t1 set t1.caracter = concat(t1.caracter,lg)
from
 (select id_val,ver,caracter,lead(caracter) over (order by id_val) lg from t1) tab,t1
 where lg in (select frase from t2)
 and tab.caracter = t1.caracter;

 delete from t1 where caracter in (select frase from t2);

select * from t1;

id_val  ver caracter
1   abc abc
1   abc 3
1   abc x
1   abc 2
1   abc y
2   def def
2   def 5
2   def y
2   def 9
2   def z
sql sql-server indexing string-concatenation cursors
1个回答
0
投票

希望这达到目的,您必须利用lead()聚合函数来获取下一行。您可以在带有表和记录的dbfiddle链接中找到完整的解决方案,以显示查询的工作方式。该解决方案适用于SQLSEVER 2019。 DECLARE @frase VARCHAR (100) DECLARE MICURSOR CURSOR FOR SELECT caracter FROM t1 OPEN MICURSOR FETCH NEXT FROM MICURSOR WHILE @@fetch_status = 0 BEGIN SELECT t1.caracter FROM t1 INNER JOIN t2 ON t2.frase LIKE CONCAT('%', t1.caracter,'%') UPDATE t1 SET caracter= 'caracter' + '(@frase-1)' FETCH NEXT FROM MICURSOR INTO @frase END CLOSE MICURSOR DEALLOCATE MICURSOR

© www.soinside.com 2019 - 2024. All rights reserved.