我试图让这个陈述用于挖掘自由文本字段中的一些文本......
SELECT
CASE
WHEN Theme_Q1 LIKE '%Education%' THEN
INSERT INTO #tempThemeCnt(Theme1, ThemeCnt) VALUES ( 'Education', 1 )
WHEN Theme_Q1 LIKE '%Care%' THEN
INSERT INTO #tempThemeCnt(Theme1, ThemeCnt) VALUES ( 'Care', 1 )
END
FROM dbo.tblWNHPSurvey
谢谢大家的帮助......
答案 0 :(得分:1)
试试这个:
INSERT INTO #tempThemeCnt(Theme1, ThemeCnt)
SELECT (CASE WHEN Theme_Q1 LIKE '%Education%' THEN 'Education'
WHEN Theme_Q1 LIKE '%Care%' THEN 'Care'
ELSE ''
END) AS Theme1, 1
FROM dbo.tblWNHPSurvey;
答案 1 :(得分:1)
编辑 - 更新以反映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
注意: 这可能是相当缓慢的... LIKE' %%'谓词没有可以使用的索引。
原始答案......
案例不是流量开关的控制 - 它是一个格式化程序。你不会为每个案件做 不同的事情 - 你会得到不同的东西
它会是这样的:
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
请注意,如果值未映射到Education或Care,则无法从您的示例中了解您想要的内容 - 此示例只是将dbo.tblWNHPSurvey中的任何内容添加到临时表中,如果它没有&#的ThemeCnt为1 39; t match ...
另外 - 我怀疑你之后可能想把它分组......
答案 2 :(得分:0)
可悲的是,案件并不像那样。 您可以使用以下逻辑来实现此目的:
if exists (select top 1 1 from dbo.tblWNHPSurvey where Theme_Q1 like '%Education%')
insert into #tempThemeCnt(Theme1, ThemeCnt) VALUES ( 'Education', 1 )
if exists (select top 1 1 from dbo.tblWNHPSurvey where Theme_Q1 like '%Care%')
insert into #tempThemeCnt(Theme1, ThemeCnt) VALUES ( 'Care', 1 )