SQL Server案例语句
我试图编写一个查询,每个SQL Server案例语句,sql,sql-server-2014,Sql,Sql Server 2014,我试图编写一个查询,每个employeerid只生成一行,而不是每个雇主生成多行,一次只填充一列。我的查询结果如下: 我使用的查询是: SELECT Employer.employerid, CASE WHEN Service.xxserviceid = '1' THEN 'Number 1' ELSE 'NULL' END AS Service1, CASE WHEN Service.xxserviceid = '2' THEN 'Number 2' ELSE 'NULL'
employeerid
只生成一行,而不是每个雇主生成多行,一次只填充一列。我的查询结果如下:
我使用的查询是:
SELECT Employer.employerid,
CASE WHEN Service.xxserviceid = '1' THEN 'Number 1' ELSE 'NULL' END AS Service1,
CASE WHEN Service.xxserviceid = '2' THEN 'Number 2' ELSE 'NULL' END AS Service2,
CASE WHEN Service.xxserviceid = '3' THEN 'Number 2' ELSE 'NULL' END AS Service3
FROM Employer
INNER JOIN Service
ON Service.employerid = Employer.employerid;
因此,我希望每个雇主在一行中填写
Service1
,Service2
,Service3
,而不是在多行中填写 您可以使用分组依据
+MAX
将结果减少到每个员工一行:
SELECT Employer.employerid,
max(CASE WHEN Service.xxserviceid = '1' THEN 'Number 1' ELSE 'NULL' END) AS Service1,
max(CASE WHEN Service.xxserviceid = '2' THEN 'Number 2' ELSE 'NULL' END) AS Service2,
max(CASE WHEN Service.xxserviceid = '3' THEN 'Number 3' ELSE 'NULL' END) AS Service3
FROM Employer
INNER JOIN Service
ON Service.employerid = Employer.employerid
GROUP BY Employer.employerid;
但是,如果您仔细考虑一下,您甚至不需要与Employer
表连接,因为您从中使用的只是employerid
列,该列已经存在于服务中
因此,查询可以简化为:
SELECT employerid,
max(CASE WHEN xxserviceid = '1' THEN 'Number 1' ELSE 'NULL' END) AS Service1,
max(CASE WHEN xxserviceid = '2' THEN 'Number 2' ELSE 'NULL' END) AS Service2,
max(CASE WHEN xxserviceid = '3' THEN 'Number 3' ELSE 'NULL' END) AS Service3
FROM Service
GROUP BY employerid;
SQLFiddle:据我所知,您可能只需要一个服务专栏。
这篇文章中提供的其他答案应该有用。但是,如果您只需要一个服务列,可以尝试以下操作:
SELECT Employer.employerid,
'Number ' + Max(Service.xxserviceid) AS Service1
FROM Employer
INNER JOIN Service
ON Service.employerid = Employer.employerid;
GROUP BY Employer.employerid
SELECT Employer.employerid,
'Number ' + Max(Service.xxserviceid) AS Service1
FROM Employer
INNER JOIN Service
ON Service.employerid = Employer.employerid;
GROUP BY Employer.employerid