根据条件将2行连接成一行

时间:2015-03-13 14:37:42

标签: sql sql-server

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

2 个答案:

答案 0 :(得分:0)

您可以使用分组依据。查询将如下所示:

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

答案 1 :(得分: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缩小了聚合函数创建的结果集。