Объедините два запроса, чтобы получить данные в двух столбцах

SELECT 
    tblEmployeeMaster.TeamName, SUM(tblData.Quantity) AS 'TotalQuantity'
FROM 
    tblData 
INNER JOIN
    tblEmployeeMaster ON tblData.EntryByHQCode = tblEmployeeMaster.E_HQCode 
INNER JOIN
    tblPhotos ON tblEmployeeMaster.TeamNo = tblPhotos.TeamNo
WHERE
    IsPSR = 'Y'
GROUP BY 
    tblPhotos.TeamSort, tblPhotos.TeamNo, tblPhotos.Data, 
    tblEmployeeMaster.TeamName
ORDER BY
    tblPhotos.TeamSort DESC, TotalQuantity DESC

Это возвращает

Используя это утверждение

select TeamName, count(TeamName) AS 'Head Count' 
from dbo.tblEmployeeMaster
where IsPSR = 'Y'
group by teamname

Что возвращает

Я хотел бы объединить эти 2 запроса в 1, чтобы получить результат ниже.

Пробовал союз / союз все, но безуспешно :(

Любая помощь будет очень полезна.

Почему вы группируете все эти другие столбцы в своем первоначальном запросе, когда ни один из них не появляется в вашем SELECT?

Thom A 15.12.2020 10:42

Ваш первый запрос действительно возвращает указанный результат? Я ожидал исключения...

jarlh 15.12.2020 10:44

@jarlh Что не так с первым запросом?

DavidG 15.12.2020 10:48

@DavidG, предложение GROUP BY не соответствует списку SELECT, и мне трудно поверить, что оно возвращает указанный результат. (Тем не менее, SQL Server может, как ни странно, принимать строковый литерал в качестве псевдонима столбца вместо идентификатора, так что, возможно, это не вызывает ошибку?)

jarlh 15.12.2020 11:19

@jarlh Вам не нужно ВЫБИРАТЬ все из GROUP BY, и псевдоним строки работает нормально.

DavidG 15.12.2020 11:22

@DavidG, я знаю, но если нет, результат обычно содержит дубликаты.

jarlh 15.12.2020 11:22

@jarlh Вы сказали, что это вызовет ошибку

DavidG 15.12.2020 11:23

@DavidG, я знаю, я забыл о специальном MS SQL Server для строкового литерала в качестве псевдонима столбца. (Я ожидаю исключения...)

jarlh 15.12.2020 11:24
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
8
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто использовать подзапрос следующим образом:

SELECT tblEmployeeMaster.TeamName, SUM(tblData.Quantity) AS 'TotalQuantity', 
        MAX(HEAD_COUNT) AS HEAD_COUNT, -- USE THIS VALUE FROM SUB-QUERY
        CASE WHEN MAX(HEAD_COUNT) <> 0 
             THEN SUM(tblData.Quantity)/MAX(HEAD_COUNT) 
        END AS PER_MAN_CONTRIBUTION -- column asked in comment
  FROM tblData INNER JOIN
  tblEmployeeMaster ON tblData.EntryByHQCode = tblEmployeeMaster.E_HQCode INNER JOIN
  tblPhotos ON tblEmployeeMaster.TeamNo = tblPhotos.TeamNo
  -- FOLLOWING SUB-QUERY CAN BE USED
  LEFT JOIN (select TeamName, count(TeamName) AS HEAD_COUNT 
                from dbo.tblEmployeeMaster
               where IsPSR = 'Y' group by teamname) AS HC  
         ON HC.TeamName = tblEmployeeMaster.TeamName
  where IsPSR = 'Y'
  GROUP BY tblPhotos.TeamSort, tblPhotos.TeamNo, tblPhotos.Data,tblEmployeeMaster.TeamName
  order by tblPhotos.TeamSort desc, TotalQuantity desc

Классика :) :) Не могли бы вы добавить еще один столбец, который делит общее количество / количество голов и показывает вклад на человека?

Sixthsense 15.12.2020 11:20

Обновил ответ. Обратитесь -- столбец задается в комментарии -- в коде

Popeye 15.12.2020 11:23

Ты классный :) :) :) Большое спасибо..... Копался 3 часа, а ты сделал это за минуту :)

Sixthsense 15.12.2020 11:25

Другие вопросы по теме