我在SQL Server中有以下表格。我想要做的是将家庭分组与成员总数。
得到这样的东西
任何帮助将不胜感激。
答案 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 |