以AdventureWorks为测试数据库.
如果需要获得一张职员名称清单以及职员数量,这些职员的职位相同,执行以下查询会提示错误.但是如果在GROUP BY中加入BusinessEntityID得到的结果又不是想要的.- SELECT BusinessEntityID,JobTitle,count(*)
- From HumanResources.Employee
- GROUP BY JobTitle
复制代码 解决方法是首先计算出指定职位的人员数量.然后根据这个结果,将其重新与职员表连接,以获取职员清单和指定职位的其他职员的数量信息.
可以将操作分两步进行,使用SELECT INTO语句生成一张新表,该表中包含职位名称和计数,然后将计数返回到职员表中.当然,还必须清除新生成的这张表,并处理由于同时有多人试图执行相同查询时带来的并发问题.
T-SOL中以在FROM子句中嵌入SELECT语句,一条SELECT语句返回一个结果集,但该结果集末被命名,无法在查询中被引用,所以查询中的元素必须通过名称来引用.- SELECT b.BusinessEntityID,b.JobTitle,a.numtitles
- from (select JobTitle,count(*) numtitles
- From HumanResources.Employee
- GROUP BY JobTitle) a INNER JOIN HumanResources.Employee b ON a.JobTitle=b.JobTitle
复制代码 |