Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разделете стойностите на няколко реда

Вие ще искате да използвате някакъв вид функция за разделяне с таблица, подобна на тази:

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1)) връща @temptable TABLE (items varchar(MAX)) като начало декларира @idx int declare @slice. varchar(8000) изберете @idx =1, ако len(@String)<1 или @String е нула, връщане, докато @idx!=0 начало set @idx =charindex(@Delimiter,@String) ако @idx!=0 set @ slice =left(@String,@idx - 1) else set @slice =@String if(len(@slice)>0) вмъкнете в @temptable(Items) стойности(@slice) set @String =right(@String, len(@String) - @idx) ако len(@String) =0 прекъсване край връщане край; 

След това можете да използвате външно прилагане за да се присъедините към вашата маса:

изберете t1.reference, t1.name, t1.subjecttitle, i.items субекти от вашата таблица t1outer apply dbo.split(t1.subjects, ',') i 

Дава резултат като този:

<предварителен код>| СПРАВКА | ИМЕ | SUBJECTSTITLE | ТЕМИ |------------------------------------------------ ------------------------| LL9X81MT | Изработка и декориране на грънчарски съдове | (нула) | F06 || LL9X81MT | Изработка и декориране на грънчарски съдове | (нула) | F27 || LL9X81MT | Изработка и декориране на грънчарски съдове | (нула) | F38 |

Вижте SQL скрипка с демонстрация

Ако искате да направите това без функция за разделяне, тогава можете да използвате CTE:

;с cte (препратка, име, заглавие, субект, субекти) като (изберете препратка, име, заглавие на тема, cast(left(subjects, charindex(',',subjects+',')-1) като varchar(50)) subjectitem, stuff(subjects, 1, charindex(',',subjects+','), '') субекти от вашия обединение на таблицата всички изберете препратка, име, заглавие на тема, cast(left(subjects, charindex(', ',subjects+',')-1) като varchar(50)) , stuff(subjects, 1, charindex(',',subjects+','), '') теми от cte, където субекти> '') изберете препратка, име, тема, заглавие, предмет от cte 

Вижте SQL Fiddle с демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Импортиране на данни

  2. Възстановяване на база данни на SQL Server (T-SQL)

  3. Как да избягам от единична кавичка в SQL Server?

  4. Не може да се започне разпределена транзакция

  5. Как да създадете история ИЛИ да одитирате изгледи от таблици за улавяне на промени (CDC) в SQL Server - урок за SQL Server