2015-12-29 41 views
1

我有SQL查询的问题。SQL Server - 统计有多少名称有'A',有多少'E'

我在Name列名Table_Name,例如:

'Mila', 'Adrianna' 'Emma', 'Edward', 'Adam', 'Piter' 

我想看看有多少名包含字母'A'多少包含字母'E'

输出应该是:

letter_A (5)| letter_E (3) 

我试着这样做:

SELECT Name, 
     letter_A = CHARINDEX('A', Name), 
     letter_E = CHARINDEX('E', Name) 
FROM Table_Name 
GROUP BY Name 
HAVING (CHARINDEX('A', Nazwisko) != 0 
      OR (CHARINDEX('E', Nazwisko)) != 0) 

我的查询只显示当 'A' 或 'E' 是在名称:/

谁能帮忙? :)

回答

0

你只需要合计,如果你只需要计数。

select 
sum(case when charindex('a',name) <> 0 then 1 else 0 end) as a_count 
,sum(case when charindex('e',name) <> 0 then 1 else 0 end) as e_count 
from table_name 
1

可以使用条件汇总:

select sum(case when Nazwisko like '%A%' then 1 else 0 end) as A_cnt, 
     sum(case when Nazwisko like '%E%' then 1 else 0 end) as E_cnt  
from table_name 
where Nazwisko like '%A%' or Nazwisko like '%E%'; 
+0

从技术上说'WHERE'不需要条款,除非你想有一个'COUNT(*)AS either_cnt',以确定有多少'A_cnt'和'E_cnt'重叠。 –

+0

谢谢这是我需要的:) – mac

+1

@ Mr.Llama它允许在扫描中消除不匹配的值,而不会将它们传出并计数。 - 尽管以两次处理字符串为代价。 –

0
;WITH CTE 
    AS (SELECT NAME 
     FROM (VALUES ('MILA'), 
         ('ADRIANNA'), 
         ('EMMA'), 
         ('EDWARD'), 
         ('ADAM'), 
         ('PITER'))V(NAME)), 
    CTE_NAME 
    AS (SELECT COUNT(NAME_A) NAME_A, 
       COUNT(NAME_E) NAME_E 
     FROM (SELECT CASE 
         WHEN NAME LIKE '%A%' THEN NAME 
         END NAME_A, 
         CASE 
         WHEN NAME LIKE '%E%' THEN NAME 
         END NAME_E 
       FROM CTE 
       GROUP BY NAME)A) 
SELECT * 
FROM CTE_NAME