我想记录两条这样的记录:
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/