【问题标题】: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 中选择所有内容,字符串别名可以正常工作。

标签: sql sql-server sql-server-2014


【解决方案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 个小时,你一分钟就搞定了 :)
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 2012-11-14
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
相关资源
最近更新 更多