【问题标题】:Give The Sql Query for Below Scenario给出下面场景的 Sql 查询
【发布时间】:2014-06-24 09:14:46
【问题描述】:
TeamName        Patient Name         Staff Name
Team 1C DMAC                         Sabirah Bibi
Team 1C DMAC                         Shubhi Rastogi
Team 1C DMAC    Andy Proctor    
Team 1C DMAC    Lynn Ashurst    

这四个需要这样改

TeamName        Patient Name             Staff Name
Team 1C DMAC    Andy Proctor             Sabirah Bibi
Team 1C DMAC    Lynn Ashurst             Shubhi Rastogi

提前感谢您更新 Sql 查询

【问题讨论】:

  • Give The SQL 不是个好标题。你没试过吗?
  • 您为什么将 Andy Proctor 与 Sabirah Bibi 结合,而不与 Shubhi Rastogi 结合?规则是什么?
  • 是的。他可以尝试投入一些资金让其他人完成他的工作。来吧,用户,这太恶心了 - 显示零努力,只是权利。我们不是程序员的社会保障。
  • 他确实使用了 CamelCase..
  • 一些建议...首先,不要只是要求别人给你写一个查询,如果你自己尝试一个解决方案并展示你尝试过的内容并说明什么不起作用会更好.其次,看这个问题,没有明确的答案,因为您没有提供足够的详细信息来说明为什么应该合并行。您没有提供任何关于为什么第 1 行与 3 合并以及第 2 行与 4 合并的逻辑。是否涉及任何其他字段?是否总是有多行具有相同的团队名称?这些行是否应该按照它们添加的顺序合并?

标签: sql sql-server


【解决方案1】:

试试这个

update t
    Set staffname = b.Staffname
    from 
    (
    Select teamname,patientname,row_number() over(order by teamname) 'id'
    from   Team
    where  staffname is null
    ) a
    join 
    (
    Select teamname,staffname,row_number() over(order by teamname) 'id'
    from team 
    where patientname is null
    ) b
    on a.teamname=b.teamname and a.id=b.id
    join team t
    on  t.teamname = a.teamname and t.patientname = a.patientname
    where t.staffname is null

    Delete from team where patientname is null

【讨论】:

    【解决方案2】:
    create table #temp
    (
    TeamName        varchar(50),
    PatientName         varchar(100),
    StaffName varchar(200)
    )
    insert into #temp
    select 'Team 1C DMAC ','','Sabirah Bibi'
    
    union
    
    select 'Team 1C DMAC ','','Shubhi Rastogi'
    
    union
    
    select 'Team 1C DMAC ','Andy Proctor',''
    
    union
    
    select 'Team 1C DMAC ','Lynn Ashurst',''
    
    union
    
    select 'Team 1C DMAC ','Lynn Ashurst','Andy Proctor'
    
    
    
    update #Temp set StaffName=T1.StaffName from #Temp
    
    inner join 
    (
    
    select T1.Patientname,T2.StaffName,T1.TeamName from 
    (
    
    select TeamName,PatientName,StaffName,Row_number() over(partition by TeamName order by 
    PatientName) as ID from #temp
    where StaffName ='' or Patientname !=''
    
    ) as T1
    
    inner join 
    
    (
    
    select TeamName,PatientName,StaffName,Row_number() over(partition by TeamName order by 
    PatientName) as Id from #temp
    where StaffName !='' or Patientname =''
    
    ) as T2
    
    on (T1.Id= T2.Id and (T1.StaffName='' or T2.patientName='') and T1.TeamName=T2.Teamname)
    or(T1.StaffName!='' and T2.patientName!='' and T1.TeamName=T2.Teamname)
    
    ) as T1
    
    on #Temp.TeamName=T1.TeamName
    and #Temp.PatientName=T1.PatientName
    and #Temp.StaffName=''
    
    delete from #temp where patientName=''
    
    select * from #temp'
    

    【讨论】:

    • select * from #temp' 末尾的单引号是否过多?
    • 这是我在网站上复制时出错,删除它
    • 那我建议你点击帖子下方的edit链接更新你的答案。谢谢。
    猜你喜欢
    • 2013-07-08
    • 2017-08-19
    • 1970-01-01
    • 2014-09-17
    • 2014-10-23
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多