合并两个查询以获取两列中的数据

Posted

技术标签:

【中文标题】合并两个查询以获取两列中的数据【英文标题】:Combine two queries to get the data in two columns 【发布时间】:2020-12-15 09:40:19 【问题描述】:
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 个查询合二为一,得到以下结果。

尝试联合/联合但没有成功:(

任何帮助都会非常有帮助。

【问题讨论】:

为什么在初始查询中按所有其他列进行分组,而它们都没有出现在您的 SELECT 中? 你的第一个查询真的返回指定的结果吗?我希望有一个例外...... @jarlh 第一个查询有什么问题? @DavidG,GROUP BY 子句与 SELECT 列表不匹配,我很难相信它会返回指定的结果。 (但是,SQL Server 可能会奇怪地接受字符串文字作为列别名,而不是标识符 - 所以它可能不会引发错误?) @jarlh 您不需要从 GROUP BY 中选择所有内容,字符串别名可以正常工作。 【参考方案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

【讨论】:

经典 :) :) 您能否添加另一列来划分 TotalQuantity / Head Count 并显示每个人的贡献? 更新了答案。参考 -- 在评论中询问的列 -- 在代码中 你太棒了 :) :) :) 谢谢你这么多……挖了 3 个小时,你一分钟就搞定了 :)

以上是关于合并两个查询以获取两列中的数据的主要内容,如果未能解决你的问题,请参考以下文章

查询 Parse 数据库以从 Parse 数据类中的单个列中获取数据

合并两个查询以获取 SQL 中的合并值

如何将 DataFrame 中两列中的两个日期和时间合并为一列? [复制]

尝试合并两个不同数据框的两列时出现问题?

MYSQL列中的数据以逗号隔开,如何查询?

如何检索表的值以获取sql中两列的最大值