有两个表,表1包含列W_ID and word
。表2列N_ID and note
。必须列出表{1}列中包含的NID
列中包含的所有word
字段(简单部分),并列出其他列中的字词而不重复Note
。这意味着使用N_ID
来连接STUFF
列中针对该特定words
的所有Note
。我尝试使用
使用CONTAIN
的完整文本索引
答案 0 :(得分:1)
如果您希望为N_ID显示最多字数,则可以进行透视。您可以通过连接它们将它们放在一个列中,但我建议不要这样做。这是一个支持每个N_ID最多4个单词的数据透视表。您可以根据需要进行调整。 You can view the SQL Fiddle for this here.
SELECT
n_id,
[1] AS word_1,
[2] AS word_2,
[3] AS word_3,
[4] AS word_4
FROM (
SELECT
n_id,
word,
ROW_NUMBER() OVER (PARTITION BY n_id ORDER BY word) AS rn
FROM tbl2
JOIN tbl1 ON
tbl2.note LIKE '%'+tbl1.word+'[ ,.?!]%'
) AS source_table
PIVOT (
MAX(word)
FOR rn IN ([1],[2],[3],[4])
) AS pivot_table
*更新了联接,以防止查找空格或标点符号来声明单词的结尾。
答案 1 :(得分:1)
您可以根据charindex
函数的正面结果将您的表格加在一起。
在SQL 2017中,您可以运行:
SELECT n_id, string_agg(word)
FROM words
inner join notes on 0 < charindex(words.word, notes.note);
在SQL 2017之前,没有string_agg
因此您需要使用stuff
,这比较棘手:
select
stuff((
SELECT ', ' + word
FROM words
where 0 < charindex(words.word, notes.note)
FOR XML PATH('')
), 1, 2, '')
来自笔记;
我使用了以下架构:
CREATE table WORDS
(W_ID int identity primary key
,word varchar(100)
);
CREATE table notes
(N_ID int identity primary key
,note varchar(1000)
);
insert into words (word) values
('No'),('Nope'),('Nah');
insert into notes (note) values
('I am not going to do this. Nah!!!')
,('It is OK.');