EDIT - обновление, чтобы отразить актуальную проблему OP, как описано в блоке комментариев ниже.
http://sqlfiddle.com/#!3/efd1b/5
Этот должен работать на SQL Server 2005 - У меня нет никакого способа тестирования этого. Самая ранняя версия, которую я могу запустить, - это 2008R2. Также - вы должны полностью апгрейда!
Если вы не можете увидеть, как реорганизовать его на свои столы, отправьте комментарий, но я надеюсь, что это будет довольно очевидно.
Это использует APPLY для подсчета ссылок для вас.
SELECT
t.tag,
ISNULL(m.matches, 0) AS Matches
FROM
tags AS t
OUTER APPLY (
SELECT COUNT(*)
FROM TestSet AS ts
WHERE ts.Label LIKE '%' + t.tag + '%'
)
AS m (matches)
Схема, используемая:
CREATE TABLE TestSet (
TestID INT IDENTITY(1,1) PRIMARY KEY,
Label VARCHAR(MAX)
)
INSERT TestSet(Label)
SELECT 'Educational Care'
UNION SELECT 'Care Failure'
UNION SELECT 'SomeRandomTextHere'
UNION SELECT 'Care Education'
CREATE TABLE Tags(
Tag VARCHAR(255) PRIMARY KEY
)
INSERT Tags (Tag)
SELECT 'Education'
UNION SELECT 'Care'
Результаты:
TAG MATCHES
Care 3
Education 2
Примечания: Это, вероятно, будет довольно медленно ... Одноименные '%%' сказуемое не имеет возможный индекс он может использовать.
Оригинальный ответ ...
случай не является управление реле потока - сво форматировщик. вы не делать что-то другое для каждого случая - вы возвращаете что-то другое
было бы что-то вроде этого:
INSERT #tempThemeCnt(Theme1, ThemeCnt)
SELECT
CASE
WHEN Theme_Q1 like '%Education%' THEN 'Education'
WHEN Theme_Q1 like '$Care%' THEN 'Care'
ELSE Theme_Q1
END AS Theme1,
1 AS ThemeCnt
FROM
dbo.tblWNHPSurvey
Обратите внимание, что его невозможно отличить от вашего примера, что вы хотите, если значения не были привязаны к Образованию или Уходу за вниманием - этот пример просто хранит все, что было в dbo.tblWNHPSurvey, в таблицу temp с ThemeCnt из 1, если это не соответствует ...
Также - я подозреваю, что вы можете захотеть группа это впоследствии ....
Привет, Чарли. Да, вы правы. Я сгруппирую их в конце, как только у меня все они будут учтены. В принципе, у меня есть 40 плюс ключевые слова, чтобы соответствовать каждому полю и считать их, если они совпадают. Поэтому я ожидаю, что в конце концов мой соблазнительный замахнет либо 5 из десяти раз его ординарных рядов. То, что я хочу достичь, - это проверять каждое поле и подсчитывать каждое найденное ключевое слово. Спасибо всем за помощь. – Duke0ne
Если я понимаю вас, тогда я не думаю, что это на самом деле то, что вы хотите сделать. Если строка может соответствовать нескольким ключевым словам, и вы хотите, чтобы эта строка считалась совпадающей со всеми совпадающими ключевыми словами, этот метод не будет работать. Каждая строка будет соответствовать * не более * одному из этих случаев. Опубликуйте некоторые данные примера и ожидаемый результат, но похоже, что это не решение –
, какую версию SQL Server вы используете? –