当前位置: 首页 > 面试题库 >

T-SQL-GROUP BY和LIKE-这可能吗?

阚允晨
2023-03-14
问题内容

有没有一种方法可以在GROUP BY查询中包含LIKE表达式?例如:

SELECT Count(*) 
FROM tblWhatever
GROUP BY column_x [LIKE %Fall-2009%]

column_x:

--------
BIOL-Fall_2009
HIST Fall_2009
BIOL Spring_2009

结果:

------
Fall_2009   2
Spring_2009 1

问题答案:

您需要一个返回“ Fall_2009”或“ Spring_2009”的表达式,然后对该表达式进行分组。例如:

-- identify each pattern individually w/ a case statement
SELECT
  CASE
    WHEN column_x LIKE '%Fall[_]2009'   THEN 'Fall 2009'
    WHEN column_x LIKE '%Spring[_]2009' THEN 'Spring 2009'
  END AS group_by_value
, COUNT(*) AS group_by_count
FROM Table1 a
GROUP BY 
  CASE
    WHEN column_x LIKE '%Fall[_]2009'   THEN 'Fall 2009'
    WHEN column_x LIKE '%Spring[_]2009' THEN 'Spring 2009'
  END

或者

-- strip all characters up to the first space or dash
SELECT 
  STUFF(column_x,1,PATINDEX('%[- ]%',column_x),'') AS group_by_value
, COUNT(*) as group_by_count
FROM Table1 a
GROUP BY 
  STUFF(column_x,1,PATINDEX('%[- ]%',column_x),'')

或者

-- join to a (pseudo) table of pattern masks
SELECT b.Label, COUNT(*)
FROM Table1 a
JOIN (
  SELECT '%Fall[_]2009'  , 'Fall, 2009' UNION ALL
  SELECT '%Spring[_]2009', 'Spring, 2009'
  ) b (Mask, Label) ON a.column_x LIKE b.Mask
GROUP BY b.Label


 类似资料:
  • 问题内容: 我该如何选择: 请不要告诉我可以使用,因为它们实际上来自查询。 问题答案: 没有合并和语法,但是您可以使用,如下所示。 或在评论中使用您的示例

  • 在 Transact-SQL 中,LIKE 运算符用于搜索带有 WHERE 子句的列中指定的模式。Transact-SQL 中的 LIKE 子句用于比较相同的值以使用通配符运算符。 两个通配符与 LIKE 运算符结合使用: - 百分号代表零、一个或一些字符。 - 下划线符号代表单个字符。 注意:MS Access 使用星号 () 代替百分号 () 和问号 (?) 而不是下划线 ()。 百分号代表

  • 问题内容: 问题: 将变量(或列)的值限制为数字和ASCI字符,但允许变量长度。 该脚本不会产生所需的结果: 有人知道该怎么做吗? 问题答案: 您可以使用not克拉^和一个NOT LIKE表达式来执行此操作。 因此,您说,这里不像非字母数字;)这适用于标准数字和字符: 编辑:感谢Martin的排序规则提示,如果您希望像媒体这样的字符被视为非字母数字,请在COLLATE中添加如下

  • 主要内容:语法Transact SQL 中的 Pivot 和 Unpivot 是关系运算符。可以用于将一张表转换成另一张表,以实现对桌子的清晰视图。 Pivot 运算符将行数据转换为列数据。 Unpivot 关系运算符的工作方式与 Pivot 运算符相反。它将基于列的数据转换为基于行的数据,将基于行的数据转换为基于列的数据。 语法 1. Pivot: 2. UnPivot: 示例1 在这里,我们创建的表名为“t

  • 主要内容:语法,示例SQL LIKE 子句用于在 WHERE 语句中进行模糊匹配,它会将给定的匹配模式和某个字段进行比较,匹配成功则选取,否则不选取。 LIKE 子句可以和通配符一起使用: 通配符 说明 百分号(%) 代表零个、一个或者多个任意的字符。 下划线(_) 代表单个字符或者数字。 [charlist] 字符列表中的任何单一字符。可以使用连字符(-)根据 ASCII 编码指定一个字符范围,例如: [0-9]

  • 问题内容: 我对此情况有疑问。 我在存储过程中有这样的查询: 我的问题是,这容易受到SQL注入的攻击吗?我需要将其更改为以下内容吗?(?) 问题答案: 快速的答案是不。为了易于进行SQL注入,必须使用动态SQL执行。 这 将很容易受到攻击: 这也意味着这两个示例之间没有真正的区别(至少从安全角度而言)。