【问题标题】:Concatenate values with LEFT join用左连接连接值
【发布时间】:2018-07-19 19:23:42
【问题描述】:

在搜索时,我发现了一个非常相似的帖子here 但我对那里已经发布的内容还有一个问题。

id|person_name|department_name|phone_number
--+-----------+---------------+------------
1 |"John"     |"Finance"      |"023451"
1 |"John"     |"Finance"      |"99478"
1 |"John"     |"Finance"      |"67890"
1 |"John"     |"Marketing"    |"023451"
1 |"John"     |"Marketing"    |"99478"
1 |"John"     |"Marketing"    |"67890"
2 |"Barbara"  |"Finance"      |""
3 |"Michelle" |""             |"005634"

假设我希望最终结果为:

id|person_name|department_name|phone_number
--+-----------+---------------+------------
1 |"John"     |"Finance"      |"023451", "99478", "67890"
1 |"John"     |"Marketing"    |"023451", "99478", "67890"
2 |"Barbara"  |"Finance"      |""
3 |"Michelle" |""             |"005634"

phone_number 的结果基本相似;那你能告诉我应该怎么做吗?我用 DISTINCT 尝试了 GROUP_CONCAT,但没有帮助。

【问题讨论】:

  • 为什么要标记每个 RDBMS?无论如何,对于每个关于 SO 的特定问题都有很多答案,因此您在找到答案时应该没有任何问题。
  • 标记了很多 Db 服务器,您想要解决哪些问题?
  • 根据 GROUP_CONCAT 的评论删除了其他标签

标签: mysql sql left-join


【解决方案1】:

所以这将使用转轴和逗号分隔您的数字,我认为这是预期的效果吗?这是一个 SQL Server 解决方案

declare @t table (OrderedID int, EmpName varchar(50), EmpDep varchar(50), Num varchar(50))

insert into @t
values
(1,'John','Dep1','123')
,(1,'John','Dep1','456')
,(1,'John','Dep2','789')
,(2,'Doug','Dep1','987')
,(2,'Doug','Dep1','654')
,(2,'Steve','Dep2','321')


Select
*
From @t

SELECT distinct e.EmpName,
  e.EmpDep,
  LEFT(r.Num , LEN(r.Num)-1) num
FROM @t e
CROSS APPLY
(
    SELECT r.Num + ', '
    FROM @t r
    where e.EmpName = r.EmpName
      and e.EmpDep = r.EmpDep
    FOR XML PATH('')
) r (Num)

输出:

EmpName EmpDep  num
Doug    Dep1    987, 654
John    Dep1    123, 456
John    Dep2    789
Steve   Dep2    321

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2012-11-13
    • 2016-10-02
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多