案例选择然后插入临时表不起作用

时间:2014-12-08 12:43:36

标签: sql select case

我试图让这个陈述用于挖掘自由文本字段中的一些文本......

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

谢谢大家的帮助......

3 个答案:

答案 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  )