统计SQL server 2008中每个国家/地区的人数
我有两张桌子:统计SQL server 2008中每个国家/地区的人数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两张桌子: 表1: ------------------------------ |Country |Emp Level |Name| |-----------|-----------|----- |UK |Staff |A |US |Admin Staff|B |CA |Staff |C |NL |Admin Staff|D |MN |Intern |E |IN
表1:
------------------------------
|Country |Emp Level |Name|
|-----------|-----------|-----
|UK |Staff |A
|US |Admin Staff|B
|CA |Staff |C
|NL |Admin Staff|D
|MN |Intern |E
|IN |Staff |F
|UK |Staff |G
|US |Admin Staff|H
------------------------------
表2:---------------------------------------------
|Level Guid |Level name |Country code |
|-----------|-----------|-------------------|
|101 |Admin Staff|UK |
|102 |Admin Staff|US |
|103 |Admin Staff|Global |
|105 |Staff |UK |
|106 |Staff |US |
|107 |Staff |Global |
|108 |Intern |UK |
|109 |Intern |US |
|110 |Intern |Global |
---------------------------------------------
结果应该是:
|Level ID |Level |Country| Count |
|105 |Staff |UK | 2 |
|102 |Admin Staff|US | 2 |
|107 |Staff |CA | 1 |
|103 |Admin Staff|NL | 1 |
|110 |Intern |MN | 1 |
|107 |Staff |IN | 1 |
在表2中,除美国以外的任何国家都认为英国是全球的。请注意,这些国家是单独计算的,即使在表2中,除美国、英国以外的所有国家都是全球性的。我尝试了一个查询,但它给了我错误子查询中返回的1个以上的值
SELECT country,
emp - levels,
Count(emp - levels) count,
"LevelID"= CASE
WHEN (SELECT level_guid
FROM table_2 T
WHERE u.emp - levels = T.level_name
AND u.country IN ( 'UK', 'US' )) IS NOT NULL
THEN
(SELECT level_guid
FROM table_2 T
WHERE u.emp - levels = T.level_name
AND u.country NOT IN ( 'UK', 'US' ))
ELSE (SELECT level_guid
FROM [DPN_Reporting].dbo.taxonomytermset T
WHERE u.emp_levels = T.level_name
AND T.level_name = 'Global')
END
FROM table_1 u
WHERE emp - levels IS NOT NULL
AND emp - levels != ''
GROUP BY emp - levels,
country
ORDER BY Count(emp - levels) DESC
试试这个
CASE
WHEN EXISTS(SELECT level_guid
FROM table_2 T
WHERE u.emp - levels = T.level_name
AND u.country IN ( 'UK', 'US' ))
THEN (SELECT MAX(level_guid)
FROM table_2 T
WHERE u.emp - levels = T.level_name
AND u.country NOT IN ( 'UK', 'US' ))
ELSE (SELECT MAX(level_guid)
FROM [DPN_Reporting].dbo.taxonomytermset T
WHERE u.emp_levels = T.level_name
AND T.level_name = 'Global')
END
这里有两个问题:
SELECT T2.[Level Guid] [Level ID], T1.[Emp Level] Level, T1.Country, COUNT(*) Count
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.[Emp Level] = T2.[Level name]
AND CASE T1.Country WHEN 'UK' THEN 'UK' WHEN 'US' THEN 'US' ELSE 'Global' END = T2.[Country code]
GROUP BY T2.[Level Guid], T1.[Emp Level], T1.Country
SQLFiddle:
及
SQLFiddle:
Count
中的第一个将给出具有相同T2.[Level Guid],T1.[Emp Level],T1.Country
的人数
计数
中的第二个将给出同一国家的人数
。请注意,我添加了一个DISTINCT,以使结果与您相同
我认为第二个查询是无用的,因为您丢失了信息,例如,有2名英国员工
和2名美国管理员工
作为建议,请不要在列名中加空格类似的内容可能适合您:
SELECT [Level Guid], [Level name], Country , COUNT(*) [Count]
FROM dbo.table_1 t1
LEFT JOIN dbo.table_2 t2 ON t2.[Country code] = CASE WHEN t1.Country IN ('UK','US') THEN t1.Country ELSE 'Global' END
AND t1.[Emp Level] = t2.[Level name]
GROUP BY [Level Guid], [Level name], Country
ORDER BY COUNT(*) DESC
国家(美国、英国)和州(加利福尼亚州、明尼苏达州……)有着相当奇怪的组合。将国家和州列分开不是更合理吗?@mvp不是加拿大的CA,MN可能是另一个国家的MN?请以sql格式提供您的表。CA-加拿大,NL-荷兰,in-印度,MN。。嗯。。黑山?就我个人而言,我责怪老师们,作业问题的标准已经不再是以前的标准:)MN是蒙古国-
SELECT [Level Guid], [Level name], Country , COUNT(*) [Count]
FROM dbo.table_1 t1
LEFT JOIN dbo.table_2 t2 ON t2.[Country code] = CASE WHEN t1.Country IN ('UK','US') THEN t1.Country ELSE 'Global' END
AND t1.[Emp Level] = t2.[Level name]
GROUP BY [Level Guid], [Level name], Country
ORDER BY COUNT(*) DESC