使用另一列中的多个值计算一列中的不同记录

Cha*_*had 4 sql sql-server sql-server-2008

我很确定这是一个简单的问题,但我在编写问题时遇到了麻烦.

我需要根据另一列中的不同条件计算一列中的值的总数.

例:

A CD

B ABC 

C AD

D A
Run Code Online (Sandbox Code Playgroud)

会产量:

A 3

B 1

C 2

D 2
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

首先,您不应该在字符串中存储事物列表.

但是,有时人们会坚持使用这种格式.在您的示例中,您似乎有一个包含所有可能值的表.如果是这样,你可以使用join:

select e.col1, count(e2.col2)
from example e left join
     example e2
     on charindex(e.col1, e2.col2) > 0
group by e.col1;
Run Code Online (Sandbox Code Playgroud)

注意:这会计算包含值的行.如果单个行中出现多个值,则查询会更复杂一些.


Gio*_*uri 5

以下是如何做到这一点:

DECLARE @t TABLE ( c1 CHAR(1), c2 VARCHAR(5) )

INSERT  INTO @t
VALUES  ( 'A', 'CD' ),
        ( 'B', 'ABC' ),
        ( 'C', 'AD' ),
        ( 'D', 'A' )


SELECT  t.c1 ,
        SUM(count) AS count
FROM    @t t
        CROSS APPLY ( SELECT    LEN(c2) - LEN(REPLACE(c2, t.c1, '')) AS count
                      FROM      @t
                      WHERE     c2 LIKE '%' + t.c1 + '%'
                    ) ca
GROUP BY t.c1
Run Code Online (Sandbox Code Playgroud)

  • 我想你的答案对于通用场景来说是最准确的. (3认同)