如何将具有差异值的行合并为1?(SQL Server 2008)

如何将具有差异值的行合并为1?(SQL Server 2008),sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,第一篇文章是关于SQL的,非常新的一篇文章——希望这不是一个太傻的问题,但我希望能得到一些帮助 我有以下疑问: select t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime, t.classname, s.staffcontact1, s.staffcontact2 from wh.dbo.classmain t left outer join wh.dbo.staff s on s.

第一篇文章是关于SQL的,非常新的一篇文章——希望这不是一个太傻的问题,但我希望能得到一些帮助

我有以下疑问:

select  
    t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime,
    t.classname, s.staffcontact1, s.staffcontact2 
from 
    wh.dbo.classmain t
left outer join 
    wh.dbo.staff s on s.staffid = t.staffID
where 
    t.staffID = '3453'
group by 
    t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime,
    t.classname, s.staffcontact1, s.staffcontact2
这给了我以下的结果

  staffid lessonday lessonstarttime lessonendtime classname staffcontact1 staffcontact2 
1  3435     Tue          12:34         13:30         Eng         127            0   
2  3435     Tue          12:34         13:30         Eng         340            0
现在,首先,由于此查询的原因,
staffID
不应该有任何重复项,但是在这种情况下,数据质量问题导致
staffcontact1
有两个单独的条目(它们应该在同一条线上,因此
staffcontact1
340
,staffcontact2是
127


我如何修改我的代码来编辑所有的重复项,以便在
staffcontact1
位于一个单独的列中时,将其放入
staffcontact2
中,从而消除重复项?

如果每个staffID的最大行数为2,则使用
MAX
MIN
功能

还清除了一些丢失的逗号等

左侧外部联接上也不是100%,因此请先尝试第二个查询,看看它是否会产生预期的结果

SELECT t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime, t.classname, MIN(s.staffcontact1) AS staffcontact1, MAX(s.staffcontact1) AS staffcontact2
FROM wh.dbo.classmain t
LEFT OUTER JOIN wh.dbo.staff s ON s.staffid = t.staffID
WHERE t.staffID = '3453'
GROUP BY t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime, t.classname
使用
内部联接

SELECT t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime, t.classname, MIN(s.staffcontact1) AS staffcontact1, MAX(s.staffcontact1) AS staffcontact2
FROM wh.dbo.classmain t
INNER JOIN wh.dbo.staff s ON s.staffid = t.staffID
WHERE t.staffID = '3453'
GROUP BY t.staffID, t.lessonday, t.lessonstarttime, t.lessonendtime, t.classname

真正正确的答案是修复数据,而不是像下面这样胡乱处理:

步骤1:删除有问题的行

DELETE FROM wh.dbo.staff
WHERE staffID = '3453'
AND staffcontact1 = '127'
步骤2:正确更新其他记录:

UPDATE wh.dbo.staff
SET staffcontact2 = '127'
WHERE staffID = '3453'

就在同一天,我们回答了一个类似的问题。您希望了解如何使用pivot


添加缺少的逗号(在列之间、选择列表和group by子句中)。
MAX(staffcontact2)As staffcontact2
仍将为0,不是吗?应为
MAX(StaffContact1)
?@TJB-Woops!谢谢,修复了输入错误。