我对SQL很陌生,无法解决这个问题,需要一些帮助!
我的表看起来像这样:
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="307" colspan="3" valign="top">
<p>
<strong>Kompetens</strong>
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
<strong>Emp.nr</strong>
</p>
</td>
<td width="102" valign="top">
<p>
<strong>Code</strong>
</p>
</td>
<td width="102" valign="top">
<p>
<strong>EndDate</strong>
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
111
</p>
</td>
<td width="102" valign="top">
<p>
Dansa1
</p>
</td>
<td width="102" valign="top">
<p>
2015-01-01
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
111
</p>
</td>
<td width="102" valign="top">
<p>
Dansa2
</p>
</td>
<td width="102" valign="top">
<p>
2015-02-01
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
222
</p>
</td>
<td width="102" valign="top">
<p>
Dansa1
</p>
</td>
<td width="102" valign="top">
<p>
2015-01-01
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
222
</p>
</td>
<td width="102" valign="top">
<p>
Dansa2
</p>
</td>
<td width="102" valign="top">
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
333
</p>
</td>
<td width="102" valign="top">
<p>
Dansa1
</p>
</td>
<td width="102" valign="top">
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
333
</p>
</td>
<td width="102" valign="top">
<p>
Dansa2
</p>
</td>
<td width="102" valign="top">
<p>
2015-02-02
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
444
</p>
</td>
<td width="102" valign="top">
<p>
Dansa1
</p>
</td>
<td width="102" valign="top">
<p>
2015-01-01
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
444
</p>
</td>
<td width="102" valign="top">
<p>
Dansa2
</p>
</td>
<td width="102" valign="top">
<p>
2015-02-01
</p>
</td>
</tr>
</tbody>
</table>
我想合并为每个员工一行,其中Dansa1和Dansa2都有一个EndDate。像这样:
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="102" valign="top">
<p>
<strong>Emp.nr</strong>
</p>
</td>
<td width="102" valign="top">
<p>
<strong>EndDate</strong>
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
111
</p>
</td>
<td width="102" valign="top">
<p>
2015-02-01
</p>
</td>
</tr>
<tr>
<td width="102" valign="top">
<p>
444
</p>
</td>
<td width="102" valign="top">
<p>
2015-02-01
</p>
</td>
</tr>
</tbody>
</table>
我还使用字符串变量来选择要包含的员工:
SELECT [Emp.nr], [Code]
FROM [Kompetens]
WHERE [Emp.nr] IN @strEmp.nr
答案 0 :(得分:0)
您可以使用分组依据。查询将如下所示:
SELECT [Emp.nr], [EndDate]
FROM [Kompetens]
group by [Emp.nr], [EndDate]
答案 1 :(得分:0)
您希望仅显示包含条目dansa1和dansa2的行。
您可以使用group by
,count
和having
执行此操作:
SELECT [Emp.nr], max([EndDate])
FROM [Kompetens]
GROUP BY [Emp.nr]
HAVING count(*) > 1
注意:像这样,您不会精确检查两行是否都有“Dansa1”和“Dansa2”。如果他们两次使用“Dansa1”也会有效。使用max()
,您只选择最新日期。
修改强>
如果您有行,例如在Code
字段中没有值,那么您可以使用where
子句排除它们,如下所示:
SELECT [Emp.nr], max([EndDate])
FROM [Kompetens]
WHERE Code IS NOT NULL AND Code != ""
GROUP BY [Emp.nr]
HAVING count(*) > 1
Where
缩小了聚合函数的基础。 Having
缩小了聚合函数创建的结果集。