Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
统计SQL server 2008中每个国家/地区的人数_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

统计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