2015-03-13 56 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