sql - 通过创建新字段合并 SQL 结果?

标签 sql pivot

我想记录两条这样的记录:

Id   Fname  Lname  Email
------------------------------------
1    John   Doe    jdoe@example.com
2    John   Doe    doej1@place.net

并以这样的方式组合它们,我只有一个记录:
Id   Fname  Lname Email1            Email2
---------------------------------------------------
1    John   Doe   jdoe@example.com  doej@place.net

如您所见,这将向我的记录添加一个字段,否则数据库中不存在该字段。这是可能的还是我必须找到另一种方法?

注意:我无法以任何方式更改数据库结构。

最佳答案

数据库产品和版本在这里产生了很大的不同。假设您使用的是支持排名功能的东西(例如 SQL Server 2005+)

Select FName, LName
    , Min( Case When Rnk = 1 Then Z.Email End ) As Email1
    , Min( Case When Rnk = 2 Then Z.Email End ) As Email2
From    (
        Select FName, LName, Email
            , Row_Number() Over ( Partition By FName, LName Order By Id ) As Rnk
        From MyTable
        ) As Z
Group By Z.FName, Z.LName

如果您使用的不是支持排名功能的产品(例如 MySQL),那就比较棘手了。一种适用于几乎所有数据库系统的解决方案是:
Select FName, LName
    , Min( Case When Rnk = 1 Then Z.Email End ) As Email1
    , Min( Case When Rnk = 2 Then Z.Email End ) As Email2
From    (
        Select FName, LName, Email
            , (Select Count(*)
                From MyTable As T2
                Where T1.FName = T2.FName
                    And T2.LName = T2.LName
                    And T2.Id < T1.Id) + 1 As Rnk
        From MyTable As T1
        ) As Z
Group By Z.FName, Z.LName

关于sql - 通过创建新字段合并 SQL 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683550/

相关文章:

mysql - 如何使用聚合函数连接来自相关查询的数据?

php - 在将数据保存到数据库之前如何检查重复项?

php - Mysql-PHP,基于变量字段的旋转/交叉表

mysql - 如何将查找表的行变成查询的列?

mysql CONVERT_TZ 不一致的行为

sql - 将 COUNT 的值添加到现有值

sql - 按组按总数选择语句

mysql,转置/旋转行到列,变量选择

mysql - MySQL 中 GROUP_CONCAT 的对立面是什么?

mysql - 右连接查询不起作用