如何将具有差异值的行合并为1?(SQL Server 2008)
第一篇文章是关于SQL的,非常新的一篇文章——希望这不是一个太傻的问题,但我希望能得到一些帮助 我有以下疑问:如何将具有差异值的行合并为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.
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!谢谢,修复了输入错误。