0

SQL Server に 2 つのテーブルがあります。

表1

ID  SkillSetRequired                 SkillDesc
1   100-1,101-1,102-2,103-3          null
2   100-4,105-2                      null
3   100-1,102-2,104-2                null  
4   100-5,102-2                      null   
5   105-1                            null 

表2

ID    SkillName
100   .Net
101   Java
102   JQuery
103   Sql
104   PHP
105   C

SkillNamesのSkillDesc列を更新する必要があります。Table1たとえば、最初の行では、skilldesc を次のように更新する必要があります。'.Net,Java,Jquery,SQL'

カーソルを使用せずにこれを行うにはどうすればよいですか?

単一のレコードに対して、以下のクエリから結果を文字列で取得しています。しかし、すべての行を更新する必要があります。

declare @result varchar(max)

SET @result = ''            
SELECT @result = @result + ltrim(rtrim(SkillName)) + ',' from  #Table2 where id in(
                         select SUBSTRING(items, 0 + 1, CHARINDEX('-', items, 1) - 0 - 1)  from split('100-1,101-1,102-2,103-3',','))
                         select @result
4

3 に答える 3

1

まず、どのように 100-1,101-1,102-2,103-3 をテーブルに挿入しましたか?

上記を追加しながら、以下のマッピングを行います。次のような Case ステートメントを使用します

Case 
when @Skillset = '100' THEN @desc = .Net
when @Skillset = '101' THEN @desc = Java
....
END

他のスキルセットについても同様です。

次に、すべての ID のテーブルに挿入しながら、スキルセットを追加し、どの更新に @Desc を使用しますか?

于 2013-10-25T12:45:25.890 に答える
0

実行に時間がかかりますが、カーソルが最適なオプションだと思います。

     SELECT ID,SkillSetRequired 
     FROM #Table1
     OPEN @CurSkillUpdate
     FETCH NEXT
     FROM @CurSkillUpdate INTO @id,@skills
     WHILE @@FETCH_STATUS = 0
     BEGIN
        SET @result = ''            
        SELECT @result = @result + ltrim(rtrim(SkillName)) + ',' from  #Table2 where id in(
        select SUBSTRING(items, 0 + 1, CHARINDEX('-', items, 1) - 0 - 1)  from split(@skills,','))          
        update #Table1 set SkillDesc=@result where ID=   @id
     FETCH NEXT
     FROM @CurSkillUpdate INTO  @id,@skills
     END
于 2013-10-28T06:03:28.753 に答える