sql - 使用 CASE 根据字符串列中的特定文本创建新列

标签 sql sql-server case

我发现了几个类似的线程,但没有一个有效。我正在尝试在另一列满足特定条件时创建一个新列。

这是我正在使用的代码:

SELECT DISTINCT R.[Column1] AS Person, 
SUM(CASE WHEN  R.[Event] = 'Event1' THEN 1 ELSE NULL END) AS Event1,
    CASE (WHEN L.[Column2] LIKE '%String1%' THEN 'String1'
        ELSE WHEN L.[Column2] LIKE '%String2%' THEN 'String2'
        ELSE WHEN L.[Column2] LIKE '%String3%' THEN 'String3'
        ELSE NULL END) AS NewColumn
  FROM [Database1].[dbo].[Table1] R
  LEFT JOIN
     [Database1].[dbo].[Table2] L
        ON R.[UniqueIdentifier] = L.[UniqueIdentifier]
    WHERE L.[Column2] LIKE '%String1%'
        OR L.[Column2] LIKE '%String2%'
        OR L.[Column2] LIKE '%String3%'
GROUP BY  R.[Column1], L.[Column2]
ORDER BY R.[Event1] DESC

如果我从第 2 列取出 CASE 语句,那么查询就可以正常工作。我想要的结果是三列:Person、String、Event...通过 Person 和 String 上的聚合来计数事件。

The error is: Msg 156, Level 15, State 1, Line 3 Incorrect syntax near the keyword 'CASE'.

最佳答案

您遇到了一些语法问题:

第一个问题是:CASE(WHEN

第二个问题是:ELSE WHEN

现在应该可以正常运行了:

SELECT DISTINCT
       R.[Column1] AS Person,
       SUM(CASE
               WHEN R.[Event] = 'Event1'
               THEN 1
               ELSE NULL
           END) AS Event1,
       (CASE
            WHEN L.[Column2] LIKE '%String1%'
            THEN 'String1'
            WHEN L.[Column2] LIKE '%String2%'
            THEN 'String2'
            WHEN L.[Column2] LIKE '%String3%'
            THEN 'String3'
            ELSE NULL
        END) AS NewColumn
FROM [Database1].[dbo].[Table1] R
     LEFT JOIN [Database1].[dbo].[Table2] L ON R.[UniqueIdentifier] = L.[UniqueIdentifier]
WHERE L.[Column2] LIKE '%String1%'
      OR L.[Column2] LIKE '%String2%'
      OR L.[Column2] LIKE '%String3%'
GROUP BY R.[Column1],
         L.[Column2]
ORDER BY R.[Event1] DESC;

关于sql - 使用 CASE 根据字符串列中的特定文本创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45018423/

相关文章:

sql - 带条件的 T-SQL OVER/PARTITION BY 查询

mysql - 使用 CASE 时指定 SUM 列

java - 如果子查询的结果集列值为 NULL,则显示某个值

mysql - 购物车 - 左连接 - 希望限制为最接近购买日期的一行商品

sql - 在SQL中表示 “X of Y”

python - 从 Python (pyodbc) 使用 SQL Server 存储过程

仅具有唯一 ID 的 Mysql SUM CASE

mySQL,用新值替换第 n 个值

mysql - 将以分钟为单位的数字 INT 转换为 MySQL 中的 TIME

mysql - 如何从多表条件求和查询中仅选择非零值