SQL Server - Pivot插入NULL值,需要跳过它们

时间:2014-12-17 23:04:43

标签: sql null pivot

我正在做一些工作来从数据库中提取一些信息,其中包括使用数据透视表以我们需要的格式获取信息。

问题是,这个数据包包含一堆NULL值,因此使一些信息从第一个旋转列开始相当多的列。

代码在这里:

BEGIN
CREATE TABLE dbo.tempTable
(
    id varchar(100),
    FirstName varchar(100),
    LastName varchar(100),
    code varchar(100),
    rn int
)
END

BEGIN
with base as (
select distinct tblstudent.code as ID, tblstudent.firstname as FirstName, tblstudent.FamilyName as LastName,  tblSubject.code as code

from  tblSubject inner join tblSubjectChoice on tblSubject.id = tblSubjectChoice.subjectid inner join tblStudent on tblSubjectChoice.studentid = tblstudent.id
)

insert into temptable
SELECT *, row_number() over (partition by base.LastName order by base.ID) as rn
FROM base

END

BEGIN

SELECT * FROM tempTable
pivot (min (code) for rn in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20])) as pvt

DROP TABLE tempTable

END

(我非常清楚它可能不是最有效的方式,但我不是在问这个问题。我们的数据集并不大)

大多数都很好,例如:

11111   John    Smith   8A  8B  8C  8D  8E  8F  8G  8H  8I  8J  8K  8L  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

那是完美的。

然而,其他人出现如下:

11112   Bob Smith   NULL    NULL    NULL    NULL    NULL    8F  8G  8H  8I  8J  8K  8L  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

正如您所看到的,它没有跳过NULL并且正在插入所有内容。那不是我们想要的。

我已经尝试过放入"其中IS NOT NULL"是地方,但它还在插入东西:(

编辑(更多信息): 我已经取出了一些数据,因为我在这里处理敏感数据。

tblSubject:ID(PK)代码名称

2ADD5FE0-EDC2-49FA-94C6-00BCDCD059D4 8A法文

tblSubjectChoice是一个具有tblsubject和tblstudent PK的表。我无法提供具体示例,但我只使用SQL语句中表达的列。

基本上我的数据试图从所有学生中提取所有课程。它做得很好,只是枢轴插入NULL值。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

我是一个很大的白痴:)

该错误是“base by base.lastname”。它只是继续为具有相同姓氏的学生(但没有正确地命令他们?所以我看不到模式)。通过base.id进行分区非常有效。

感谢您的帮助,bluefeet:)