合并两个查询以获取两列中的数据
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 数据类中的单个列中获取数据