2015-05-04 97 views
1

分開我有一個表只有一個山坳,幷包含自由文本,並且每個關鍵字用空格MySQL中,通過空間

TEXT 
apple orange dog 
apple banna cat 

我想有一個結果某物像

分開排名的關鍵字
apple 2 
orange 1 
dog 1 
banna 1 
cat 1 

只用SQL可能嗎?

+0

將它永遠是3個值? – Darvanen

回答

0

試試這個

創建功能

Create FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20)) 
RETURNS @Strings TABLE 
( 
    position int IDENTITY PRIMARY KEY, 
    value varchar(8000) 
) 
AS 
BEGIN 

DECLARE @index int 
SET @index = -1 

WHILE (LEN(@text) > 0) 
    BEGIN 
    SET @index = CHARINDEX(@delimiter , @text) 
    IF (@index = 0) AND (LEN(@text) > 0) 
     BEGIN 
     INSERT INTO @Strings VALUES (@text) 
      BREAK 
     END 
    IF (@index > 1) 
     BEGIN 
     INSERT INTO @Strings VALUES (LEFT(@text, @index - 1)) 
     SET @text = RIGHT(@text, (LEN(@text) - @index)) 
     END 
    ELSE 
     SET @text = RIGHT(@text, (LEN(@text) - @index)) 
    END 
    RETURN 
END 

查詢

declare @ColumnNameList VARCHAR(MAX) 
select @ColumnNameList = COALESCE(@ColumnNameList +' ' ,'') +column from table 
select @ColumnNameList 
select value,count(value) as count from (select value from fn_split((select @ColumnNameList),' ')) 
Space_tbl group by value