Member 10943256 Ответов: 1

Как заполнить второй столбец в соответствии со строкой в первом столбце, используя while


Hello,
I have only 2 columns in sql server. The first column (name) starts with the name "abc" in the first line and it ends in the 4th line (Endabc). I need to have second red color column: (while the first column starts with "abc" until the word "Endabc", update second column and put 'abc' in all those cells <big>until the word "Endabc</big>"(and doing the same for "def" in the line 5 and 6)
How can i do it?
Thanks.

<a href="https://drive.google.com/file/d/1bkEVIB-nYbtbH7iQq1GAWwoN89OeMmzZ/view?usp=sharing"></a>


& & gt;

Что я уже пробовал:

То, что я написал, похоже на это, но это не правильно, потому что я должен использовать sth lie do while для этого!

<pre>create table Test3 (name nvarchar(255), SecondColumn nvarchar(255))

INSERT INTO Test3 values ('abc', '')
 INSERT INTO Test3 values ('123abc456', '')
 INSERT INTO Test3 values ('', '')
  INSERT INTO Test3 values ('Acode', '')
 INSERT INTO Test3 values ('Endabc', '')
 INSERT INTO Test3 values ('def', '')
 INSERT INTO Test3 values ('Enddef', '')
-----------------------

Update Test3
SET  SecondColumn  = 'abc'  
FROM Test3
where [name]  LIKE '%abc%'

Update Test3
SET  SecondColumn  = 'def'  
FROM Test3
where [name]  LIKE '%def%'

select *
from Test3

1 Ответов

Рейтинг:
6

Richard Deeming

Ваши данные не имеют определенной последовательности. Без столбца для упорядочения нет определенного порядка для ваших строк, поэтому нет никакого способа узнать, какие строки должны появиться между "abc" и "endabc".

Добавьте столбец, чтобы обеспечить последовательность в вашей таблице:

CREATE TABLE Test3
(
    ID int NOT NULL IDENTITY(1, 1),
    name nvarchar(255) NOT NULL,
    SecondColumn nvarchar(255) NULL
);

INSERT INTO Test3 (name)
VALUES
    ('abc'), 
    ('123abc456'), 
    (''), 
    ('acode'), 
    ('endabc'), 
    ('def'), 
    ('enddef')
;
Затем вы можете использовать подзапрос, чтобы найти группу имен для каждой строки:
SELECT 
    ID, 
    name,
    (
        SELECT TOP 1 Substring(name, 4, Len(name))
        FROM Test3 As T2 
        WHERE T2.ID >= T.ID
        And T2.name Like 'end%'
        ORDER BY T2.ID
    ) As NameGroup
FROM 
    Test3 As T
;

/*
ID  name       NameGroup
------------------------
1   abc        abc
2   123abc456  abc
3              abc
4   acode      abc
5   endabc     abc
6   def        def
7   enddef     def
*/
Затем вы можете использовать его для обновления своей таблицы:
UPDATE
    T
SET
    SecondColumn = (
        SELECT TOP 1 Substring(name, 4, Len(name))
        FROM Test3 As T2 
        WHERE T2.ID >= T.ID
        And T2.name Like 'end%'
        ORDER BY T2.ID
    )
FROM 
    Test3 As T
;


Member 10943256

Прекрасно! Спасибо