2014-01-19 28 views
1

假設我有一些類別代碼組織詞組表:如何計算關鍵字在表格的每個部分顯示的次數?

category phrase 
0   "hello bye" 
0   "hello no" 
1   "hello bye" 
1   "yes no" 
2   "hello bye" 

然後我想計數每款每個關鍵字的出現表:

category keyword frequency 
0   "hello"  2 
0   "no"   1 
0   "bye"   1 
1   "hello"  1 
1   "bye"   1 
1   "yes"   1 
1   "no"   1 
2   "hello"  1 
2   "bye"   1 

要了解我以前的關鍵字使用此代碼:

DECLARE @xml XML 
SET @xml = '<c>' + replace(
    (select DISTINCT ' ' + phrase 
    FROM myTable 
    FOR XML PATH('') 
), ' ', '</c><c>') + '</c>' 

但我不能想辦法用這個來跟蹤類的...

+0

你有關鍵字的表格中的列表? –

+0

@GordonLinoff不,我需要生成它 – arman

回答

1

拆分功能

CREATE FUNCTION [dbo].[udf_Split] 
(
    @RowData nvarchar(2000), 
    @SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table 
(
    Id int identity(1,1), 
    Data nvarchar(100) 
) 
AS 
BEGIN 
    Declare @Cnt int 
    Set @Cnt = 1 

    While (Charindex(@SplitOn,@RowData)>0) 
    Begin 
     Insert Into @RtnValue (data) 
     Select 
      Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1))) 

     Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData)) 
     Set @Cnt = @Cnt + 1 
    End 

    Insert Into @RtnValue (data) 
    Select Data = ltrim(rtrim(@RowData)) 

    Return 
END 

您的數據

DECLARE @TABLE TABLE (category INT,phrase VARCHAR(50)) 
INSERT INTO @TABLE VALUES 
(0,'hello bye'),(0,'hello no'),(1,'hello bye'), 
(1,'yes no'),(2,'hello bye') 

查詢

SELECT category 
     , Data AS keyword 
     , COUNT(Data) AS frequency 
FROM @TABLE t CROSS APPLY 
       (SELECT * FROM [dbo].[udf_Split](t.phrase, ' '))C 
GROUP BY category,Data 
ORDER BY category 

結果集

╔══════════╦═════════╦═══════════╗ 
║ category ║ keyword ║ frequency ║ 
╠══════════╬═════════╬═══════════╣ 
║  0 ║ bye  ║   1 ║ 
║  0 ║ hello ║   2 ║ 
║  0 ║ no  ║   1 ║ 
║  1 ║ bye  ║   1 ║ 
║  1 ║ hello ║   1 ║ 
║  1 ║ no  ║   1 ║ 
║  1 ║ yes  ║   1 ║ 
║  2 ║ bye  ║   1 ║ 
║  2 ║ hello ║   1 ║ 
╚══════════╩═════════╩═══════════╝ 

SqlFiddle Demo

相關問題