Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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查询_Sql_Sql Server - Fatal编程技术网

用于从不同表中获取信息的SQL查询

用于从不同表中获取信息的SQL查询,sql,sql-server,Sql,Sql Server,需要有关sql查询的帮助。 我有两张桌子 火柴 first_referee_arbitr_id second_referee_arbitr_id home_team guest_team date 仲裁人 id name surname 第一仲裁人仲裁人id和第二仲裁人仲裁人id来自仲裁人表(id) 因此,我需要计算每名裁判参加比赛的次数: referee_first_count | referee_second_coun

需要有关sql查询的帮助。 我有两张桌子

火柴

    first_referee_arbitr_id
    second_referee_arbitr_id
    home_team
    guest_team
    date
仲裁人

    id
    name
    surname
第一仲裁人仲裁人id
第二仲裁人仲裁人id
来自仲裁人表(id)

因此,我需要计算每名裁判参加比赛的次数:

   referee_first_count | referee_second_count | Arbitr Surname | Arbitr Name 
我现在的问题是:

SELECT  T1.referee_first_count, T2.referee_second_count, T1.surname, T1.name
FROM (
    select matches.first_referee_arbitr_id, q.surname, q.name, count(*) AS referee_first_count
    FROM matches
    JOIN (
      SELECT name, surname, id
      FROM arbitrs
    ) as q ON matches.first_referee_arbitr_id=q.id
    GROUP BY matches.first_referee_arbitr_id, q.name, q.surname
    ORDER BY referee_first_count DESC
  ) T1 FULL OUTER JOIN
  (
    select matches.second_referee_arbitr_id, arbitr.surname, arbitr.name, count(*) AS referee_second_count
    FROM matches
    JOIN (
      SELECT name, surname, id
      FROM arbitrs
    ) as arbitr ON matches.second_referee_arbitr_id=arbitr.id
    GROUP BY matches.second_referee_arbitr_id, arbitr.name, arbitr.surname
    ORDER BY referee_second_count DESC
  ) T2
  ON (
  (T1.name = T2.name) AND (T1.surname = T2.surname)
  )

示例

仲裁人:


 id | Name | Surname
  1   John    Rambler
  2   Steve   Crystler
  3    Tom    Ferguson

匹配项:


 first_referee_arbitr_id| second_referee_arbitr_id| home_team | guest_team | date
         1                                            Chelsea     Everton     22.06.2020 
         2                          1                 Liverpool   Lester      28.06.2020 
         3                                            Dinamo K    Dinamo M    06.07.2020
         1                          2                 Juventus    Dinamo K    10.10.2020
         3                                            Dinamo K    Chelsea     20.20.2020

结果:


   referee_first_count | referee_second_count | surname | name
        2                       1                Rambler   John
        1                       1                Crystler  Steve
        2                       0                Ferguson  Tom
                                                 
我现在使用上面的查询得到的结果:

   referee_first_count | referee_second_count | surname | name
        2                       1                Rambler   John
        1                       1                Crystler  Steve
        2                       NULL                NULL      NULL


首先聚合
匹配项
表(两次),然后将其左键连接到
仲裁人
表:

SELECT a.name , a.Surname , ISNULL(fir.first_count,0) , ISNULL( sec.sec_count,0)
FROM Arbitrs a
LEFT JOIN (
        SELECT first_referee_arbitr_id,COUNT(*) as first_count
        FROM Matches
        GROUP BY first_referee_arbitr_id
        ) fir
        ON fir.first_referee_arbitr_id = a.id 
LEFT JOIN (
        SELECT second_referee_arbitr_id,COUNT(*) as sec_count
        FROM Matches
        GROUP BY second_referee_arbitr_id
        ) sec
        ON sec.second_referee_arbitr_id = a.id 

这就是你得到的结果吗?否则你的查询结果是什么?@asi我需要得到这个结果,现在我用这个得到另一个结果query@asi我现在添加了我的结果,这对我很有帮助。谢谢,我忘了提一下,最好得到每行的总和,然后将结果添加到总计列中
SELECT a.name , a.Surname , ISNULL(fir.first_count,0) , ISNULL( sec.sec_count,0)
FROM Arbitrs a
LEFT JOIN (
        SELECT first_referee_arbitr_id,COUNT(*) as first_count
        FROM Matches
        GROUP BY first_referee_arbitr_id
        ) fir
        ON fir.first_referee_arbitr_id = a.id 
LEFT JOIN (
        SELECT second_referee_arbitr_id,COUNT(*) as sec_count
        FROM Matches
        GROUP BY second_referee_arbitr_id
        ) sec
        ON sec.second_referee_arbitr_id = a.id