用于计算以子字符串开头的所有实例的SQL查询

时间:2011-04-14 18:04:18

标签: sql

假设我有下表:

ID:   STR:
01    abc
02    abcdef
03    abx
04    abxy
05    abxyz
06    abxyv

我需要使用一个SQL查询,它返回ID列,并将相应字符串的出现作为其他行中字符串的前缀。例如。上表所需的结果:

ID:   OCC:
01    2
02    1
03    4
04    3
05    1
06    1

2 个答案:

答案 0 :(得分:3)

你可以JOIN表格自己和GROUP BY ID来获得结果。

SELECT   t1.ID, COUNT(*)
FROM     ATable t1
         INNER JOIN ATable t2 ON t2.Str LIKE t1.Str + '%'
GROUP BY
         t1.ID

有些说明:

  • 您希望确保在Str
  • 上有索引
  • 根据数据量,您的DBMS可能会限制它必须处理的数量。 最坏情况,您要求在表格中使用 SQR(#Rows)

答案 1 :(得分:1)

可以使用以下代码在SQL Server T-SQL中执行此操作。 警告:我不保证使用大型数据集时这将如何执行!

Declare @Table table
    (
      Id int,
      String varchar(10)
    )

Insert  Into @Table
        ( Id, String )
Values  ( 1, 'abc' ),
        ( 2, 'abcdef' ),
        ( 3, 'abx' ),
        ( 4, 'abxy' ),
        ( 5, 'abxyz' ),
        ( 6, 'abxyv' )

Select  t.Id,
        t.String
From    @Table as t
        Inner Join @Table as t2 On t2.String Like t.String + '%'
Order By t.Id

Select  t.Id,
        Count(*) As 'Count'
From    @Table as t
        Inner Join @Table as t2 On t2.String Like t.String + '%'
Group By t.Id
Order By t.Id