각종 문자열 병합 처리 예시

49248 단어 sqlC++cC#Go
각종 문자열 통합 처리 예제.sql
SQL code

  
  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> -- -- 3.3.1 。 -- CREATE TABLE tb(col1 varchar ( 10 ),col2 int ) INSERT tb SELECT ' a ' , 1 UNION ALL SELECT ' a ' , 2 UNION ALL SELECT ' b ' , 1 UNION ALL SELECT ' b ' , 2 UNION ALL SELECT ' b ' , 3 -- -- DECLARE @t TABLE (col1 varchar ( 10 ),col2 varchar ( 100 )) -- DECLARE tb CURSOR LOCAL FOR SELECT col1,col2 FROM tb ORDER BY col1,col2 DECLARE @col1_old varchar ( 10 ), @col1 varchar ( 10 ), @col2 int , @s varchar ( 100 ) OPEN tb FETCH tb INTO @col1 , @col2 SELECT @col1_old = @col1 , @s = '' WHILE @@FETCH_STATUS = 0 BEGIN IF @col1 = @col1_old SELECT @s = @s + ' , ' + CAST ( @col2 as varchar ) ELSE BEGIN INSERT @t VALUES ( @col1_old , STUFF ( @s , 1 , 1 , '' )) SELECT @s = ' , ' + CAST ( @col2 as varchar ), @col1_old = @col1 END FETCH tb INTO @col1 , @col2 END INSERT @t VALUES ( @col1_old , STUFF ( @s , 1 , 1 , '' )) CLOSE tb DEALLOCATE tb -- SELECT * FROM @t DROP TABLE tb /* -- col1 col2 ---------- ----------- a 1,2 b 1,2,3 -- */ GO /* ============================================== */ -- 3.3.2 , SELECT -- CREATE TABLE tb(col1 varchar ( 10 ),col2 int ) INSERT tb SELECT ' a ' , 1 UNION ALL SELECT ' a ' , 2 UNION ALL SELECT ' b ' , 1 UNION ALL SELECT ' b ' , 2 UNION ALL SELECT ' b ' , 3 GO -- CREATE FUNCTION dbo.f_str( @col1 varchar ( 10 )) RETURNS varchar ( 100 ) AS BEGIN DECLARE @re varchar ( 100 ) SET @re = '' SELECT @re = @re + ' , ' + CAST (col2 as varchar ) FROM tb WHERE col1 = @col1 RETURN ( STUFF ( @re , 1 , 1 , '' )) END GO -- SELECT col1,col2 = dbo.f_str(col1) FROM tb GROUP BY col1 -- DROP TABLE tb DROP FUNCTION f_str /* -- col1 col2 ---------- ----------- a 1,2 b 1,2,3 -- */ GO /* ============================================== */ -- 3.3.3 -- CREATE TABLE tb(col1 varchar ( 10 ),col2 int ) INSERT tb SELECT ' a ' , 1 UNION ALL SELECT ' a ' , 2 UNION ALL SELECT ' b ' , 1 UNION ALL SELECT ' b ' , 2 UNION ALL SELECT ' b ' , 3 -- SELECT col1,col2 = CAST (col2 as varchar ( 100 )) INTO #t FROM tb ORDER BY col1,col2 DECLARE @col1 varchar ( 10 ), @col2 varchar ( 100 ) UPDATE #t SET @col2 = CASE WHEN @col1 = col1 THEN @col2 + ' , ' + col2 ELSE col2 END , @col1 = col1, col2 = @col2 SELECT * FROM #t /* -- col1 col2 ---------- ------------- a 1 a 1,2 b 1 b 1,2 b 1,2,3 -- */ -- SELECT col1,col2 = MAX (col2) FROM #t GROUP BY col1 /* -- col1 col2 ---------- ----------- a 1,2 b 1,2,3 -- */ -- DROP TABLE tb,#t GO /* ============================================== */ -- 3.3.4.1 <=2 -- CREATE TABLE tb(col1 varchar ( 10 ),col2 int ) INSERT tb SELECT ' a ' , 1 UNION ALL SELECT ' a ' , 2 UNION ALL SELECT ' b ' , 1 UNION ALL SELECT ' b ' , 2 UNION ALL SELECT ' c ' , 3 -- SELECT col1, col2 = CAST ( MIN (col2) as varchar ) + CASE WHEN COUNT ( * ) = 1 THEN '' ELSE ' , ' + CAST ( MAX (col2) as varchar ) END FROM tb GROUP BY col1 DROP TABLE tb /* -- col1 col2 ---------- ---------- a 1,2 b 1,2 c 3 -- */ -- 3.3.4.2 <=3 -- CREATE TABLE tb(col1 varchar ( 10 ),col2 int ) INSERT tb SELECT ' a ' , 1 UNION ALL SELECT ' a ' , 2 UNION ALL SELECT ' b ' , 1 UNION ALL SELECT ' b ' , 2 UNION ALL SELECT ' b ' , 3 UNION ALL SELECT ' c ' , 3 -- SELECT col1, col2 = CAST ( MIN (col2) as varchar ) + CASE WHEN COUNT ( * ) = 3 THEN ' , ' + CAST (( SELECT col2 FROM tb WHERE col1 = a.col1 AND col2 NOT IN ( MAX (a.col2), MIN (a.col2))) as varchar ) ELSE '' END + CASE WHEN COUNT ( * ) >= 2 THEN ' , ' + CAST ( MAX (col2) as varchar ) ELSE '' END FROM tb a GROUP BY col1 DROP TABLE tb /* -- col1 col2 ---------- ------------ a 1,2 b 1,2,3 c 3 -- */ GO

좋은 웹페이지 즐겨찾기