在SQL中从多个表创建句子

时间:2019-06-15 22:40:58

标签: sql sql-server-2008 subquery

我正在尝试使用下面的SQL代码创建“结果:Sabre已有12岁”的句子。

select 
    businessname+' is ' + cast(count(e.id)as varchar(11))
from
    Department d
join 
    EmployeeDepartmentHistory EDH on edh.departmentid = D.departmentid
join 
    employee e on edh.id = e.id
group by 
    name
+' years old'

如果我要运行这段代码

select 
    businessname+' is ' + cast(count(e.id)as varchar(11))
from   
    Department d
join 
    EmployeeDepartmentHistory EDH on edh.departmentid = D.departmentid
join 
    employee e on edh.id = e.id
group by 
    name

我将获得“佩剑12”

但是我在获取“岁数”字符串结尾时遇到问题。

我收到包含完整代码的错误消息

  

信息8120,第16级,状态1,第4行
  在选择列表中,“ HumanResources.Department.Name”列无效,因为它不包含在聚合函数或GROUP BY子句中。

1 个答案:

答案 0 :(得分:1)

没有一些必填信息,例如:

  1. 表的结构,哪些表具有哪些列
  2. 表之间如何关联
  3. 您要获取的内容(例如,“ businessname”在此处表示的意思)

提供适当的建议几乎没有困难。

因此,假设:

  1. EmployeeDepartmentHistory是部门之间的桥梁表 和Employee表照顾到Many:Many之间的关系 部门和员工表

  2. 一个公司名称(无论它属于哪个表)都有 下有很多员工(e.id)

  3. 您正在尝试计算以下员工的人数(e.id) 每个公司名称

这将是正确的查询:

SELECT businessname+' is ' + CAST(COUNT(e.id) AS VARCHAR(11)) + ' years old' 
FROM   Department d
       JOIN EmployeeDepartmentHistory EDH on edh.departmentid=D.departmentid
       JOIN employee e on edh.id=e.id 
GROUP  BY businessname