2015-03-13 57 views
1

我对SQL相当陌生,无法在我的脑海中找到它并需要一些帮助!根据条件将2行合并为一个*分辨率*

我的表是这个样子:

<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>

我想合并到每名员工的1列其中两个Dansa1和Dansa2有一个结束日期。就像这样:

<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

您希望仅显示包含条目dansa1和dansa2的行。

您可以group bycounthaving这样做:

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缩小由聚合函数创建的结果集。

+0

谢谢彼得!仍然有一些问题。我也得到所有没有条目的行!? – 2015-03-16 10:05:53

+0

很高兴帮助。 “没有进入”的意思是什么?如果这意味着Code字段为NULL,那么你可以将这个条件添加到where语句中。我编辑了我的答案。 – 2015-03-16 10:12:33

+0

我的不好!原来,所有员工都在数据库中有条目。刚刚添加了你所建议的where语句,并得到了我想要的。再次感谢! – 2015-03-16 10:19:39

0

您可以通过使用组。该查询将如下所示:

SELECT [Emp.nr], [EndDate] 
FROM [Kompetens] 
group by [Emp.nr], [EndDate] 
+0

这并不能解决我的问题,我想!但也许我的理解太低了!? :) – 2015-03-13 14:59:40