Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server案例语句_Sql_Sql Server 2014 - Fatal编程技术网

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