SQL Server选择带计数查询

时间:2018-05-26 14:37:27

标签: sql sql-server

我在SQL Server中有以下表格。我想要做的是将家庭分组与成员总数。

enter image description here

得到这样的东西

enter image description here

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以尝试将case when表达式与Aggregate函数

一起使用
SELECT COUNT(CASE WHEN name like '%tayson%' then 1 end) as tayson,
      COUNT(CASE WHEN name like '%ross%' then 1 end) as ross,
      COUNT(CASE WHEN name like '%dee%' then 1 end) as dee
FROM T

sqlfiddle:http://sqlfiddle.com/#!18/ef5de/2

<强>结果:

| tayson | ross | dee |
|--------|------|-----|
|      3 |    3 |   1 |

答案 1 :(得分:1)

试试这个:

使用group by

分隔姓氏和计数
select substring(name, CHARINDEX(' ', name)+1, len(name)-(CHARINDEX(' ', name)-1)) as lastname,count(*) as total
from your_table
group by substring(name, CHARINDEX(' ', name)+1, len(name)-(CHARINDEX(' ', name)-1));

如有任何疑问,请与我联系。

答案 2 :(得分:0)

首先,你需要将名称分成两列,(名字和姓氏),如果名称用空格分隔(例如Mike Tyson),那么你可以这样做:

SELECT 
       SUBSTRING(name, 1, CHARINDEX(' ', name) - 1) AS FirstName,     
       SUBSTRING(name, CHARINDEX(' ', name) + 1, LEN(name) - CHARINDEX(' ', name)) AS LastName 
FROM yourTable

这会给你:

| Firstname | Lastname |
|-----------|----------|
|      Mike |   tayson |
|      John |     ross |
|    Oliver |   tayson |
|     Aaron |      dee |
|    Robort |     ross |
|      Jack |     ross |
|     Honry |   tayson |

现在,使用它来根据姓氏计算总成员数。

SELECT 
    LastName,
    COUNT(FirstName) AS TotalMembers 
FROM (
SELECT 
       SUBSTRING(name, 1, CHARINDEX(' ', name) - 1) AS FirstName,     
       SUBSTRING(name, CHARINDEX(' ', name) + 1, LEN(name) - CHARINDEX(' ', name)) AS LastName  
FROM yourTable
) D 
GROUP BY LastName

这会给你:

| LastName | TotalMembers |
|----------|--------------|
|      dee |            1 |
|     ross |            3 |
|   tayson |            3 |

现在,您需要使用PIVOT将行旋转为列:

SELECT * 
FROM (
SELECT 
       SUBSTRING(name, 1, CHARINDEX(' ', name) - 1) AS Firstname,     
       SUBSTRING(name, CHARINDEX(' ', name) + 1, LEN(name) - CHARINDEX(' ', name)) AS Lastname 
FROM yourTable
) D 
PIVOT
(
COUNT(FirstName)
FOR  Lastname IN (tayson, ross, dee)
) AS pvt 

这会给你:

| tayson | ross | dee |
|--------|------|-----|
|      3 |    3 |   1 |