将具有空值和重复的行压缩为单行

时间:2009-05-28 23:52:17

标签: sql sql-server sql-server-2005

我不确定如何描述我想做的事情,所以我会用一个人为的例子

在SQL Server 2005上,假设我有一个像这样的行的视图,称之为vwGrades:

ID          AssnDate                AssnTxt       Sally       Ted         Bob
----------- ----------------------- ------------- ----------- ----------- -----------
2999        2007-09-22 00:00:00     Homework #1   20          NULL        NULL
2999        2007-09-22 00:00:00     Homework #1   NULL        0           NULL
2999        2007-09-22 00:00:00     Homework #1   NULL        NULL        24
2999        2007-09-22 00:00:00     Final Exam    57          NULL        NULL
2999        2007-09-22 00:00:00     Final Exam    NULL        0           NULL
2999        2007-09-22 00:00:00     Final Exam    NULL        NULL        35

我如何查询它,以便我得到这个,摆脱所有恼人的空值和重复的行?

ID          AssnDate                AssnTxt       Sally       Ted         Bob
----------- ----------------------- ------------- ----------- ----------- -----------
2999        2007-09-22 00:00:00     Homework #1   20          0           24
2999        2007-09-22 00:00:00     Final Exam    57          0           35

2 个答案:

答案 0 :(得分:6)

Select
   ID,
   AssnDate,
   AssnTxt,
   Max(IsNull(Sally,0)) AS Sally,
   Max(IsNull(Ted, 0)) As Ted,
   Max(IsNull(Bob, 0)) As Bob
From vwGrades
Group By
  ID,
  AssnDate,
  AssnTxt

答案 1 :(得分:0)

看起来像非规范化架构,你应该有一个FirstName列而不是Sally Ted和Bob。这将使查询更简单。你能重构吗?