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

SQL заявка за разделяне на данните в колоните на редове

За този тип разделяне на данни бих предложил да създадете функция за разделяне:

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.code, s.items декларация от вашата таблица t1outer apply dbo.split(t1.declaration, ',') s 

Което ще доведе до резултат:

<предварителен код>| КОД | ДЕКЛАРАЦИЯ |-----------------------| 123 | a1-2 № || 123 | a2- 230 бр. || 123 | a3 - 5nos |

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

Или можете да приложите CTE версия, подобна на тази:

;с cte (код, DeclarationItem, Declaration) като( изберете Code, cast(left(Declaration, charindex(',',Declaration+',')-1) като varchar(50)) DeclarationItem, неща (Декларация, 1, charindex(',',Декларация+','), '') Декларация от вашия съюз на таблицата all select code, cast(left(Declaration, charindex(',',Declaration+',')-1) като varchar (50)) DeclarationItem, stuff(Declaration, 1, charindex(',',Declaration+','), '') Декларация от cte, където Declaration> '') изберете код, DeclarationItemfrom cte 


  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 Management Studio (SSMS) - SQL Server / TSQL урок, част 13

  2. Изберете колони от набора от резултати на съхранената процедура

  3. Връщане на параметрите на съхранена процедура или дефинирана от потребителя функция в SQL Server (примери за T-SQL)

  4. Инсталирайте разширението на агент на SQL Server в Azure Data Studio

  5. Търсене на текст в съхранена процедура в SQL Server