【发布时间】:2012-04-24 20:24:48
【问题描述】:
如果标题不好,请见谅。但我不知道如何解决这个问题。 我一直在为 sql 中的查询而苦苦挣扎。我不知道以前是否有人问过这个问题。但我需要得到第一列不为空。我有一张这样的桌子:
ID 0 1 2 3 4 5 6 7 8 9
59 NULL NULL NULL NULL NULL NULL NULL NULL NULL text1
185 NULL NULL NULL NULL NULL text1 text2 text3 text4 text5
428 NULL NULL NULL NULL NULL NULL text1 text2 text3 text4
53 NULL NULL NULL NULL NULL NULL NULL NULL text1 text2
452 NULL NULL NULL NULL NULL NULL NULL NULL NULL text1
267 text1 text2 text3 text4 text5 text6 text7 text8 text9 text10
我希望输出是这样的:
ID 0 1 2 3 4 5 6 7 8 9
59 text1 NULL NULL NULL NULL NULL NULL NULL NULL NULL
185 text1 text2 text3 text4 text5 NULL NULL NULL NULL NULL
428 text1 text2 text3 text4 NULL NULL NULL NULL NULL NULL
53 text1 text2 NULL NULL NULL NULL NULL NULL NULL NULL
452 text1 NULL NULL NULL NULL NULL NULL NULL NULL NULL
267 text1 text2 text3 text4 text5 text6 text7 text8 text9 text10
ID 列是每行唯一的。
我失败的尝试是创建一个标量函数并为每一列运行它。函数如下所示:
CREATE FUNCTION GetCulumnsThatIsNotNull
(
@column1 VARCHAR(500),
@column2 VARCHAR(500),
@column3 VARCHAR(500),
@column4 VARCHAR(500),
@column5 VARCHAR(500),
@column6 VARCHAR(500),
@column7 VARCHAR(500),
@column8 VARCHAR(500),
@column9 VARCHAR(500),
@column10 VARCHAR(500)
)
RETURNS VARCHAR(500)
AS
BEGIN
RETURN
COALESCE(@column1,
COALESCE(@column2,
COALESCE(@column3,
COALESCE(@column4,
COALESCE(@column5,
COALESCE(@column6,
COALESCE(@column8,
COALESCE(@column9,
COALESCE(@column10,null)))))))))
END
但是这个函数的问题是它只选择了第一列null。所以结果是这样的:
ID 0 1 2 3 4 5 6 7 8 9
59 text1 text1 text1 text1 text1 text1 text1 text1 text1 text1
185 text1 text1 text1 text1 text1 text1 text1 text1 text1 text1
428 text1 text1 text1 text1 text1 text1 text1 text1 text1 text1
53 text1 text1 text1 text1 text1 text1 text1 text1 text1 text1
452 text1 text1 text1 text1 text1 text1 text1 text1 text1 text1
267 text1 text1 text1 text1 text1 text1 text1 text1 text1 text1
有什么建议吗?
编辑
这对以太不起作用。
COALESCE(pvt.[0],
pvt.[1],
pvt.[2],
pvt.[3],
pvt.[4],
pvt.[5],
pvt.[6],
pvt.[7],
pvt.[8],
pvt.[9])
因为它会导致相同的输出
【问题讨论】:
-
看看这里msdn.microsoft.com/en-us/library/ms190349.aspx 第一个例子似乎是你想要的。
-
这表明数据结构不正确。 如果您的数据元素表示相同的东西,那么它们看起来就是这样(即 0-9 都表示类似的东西)它们应该被规范化,在这种情况下,这样的查询将非常简单。
标签: tsql sql-server-2005 null sql-server-2008-r2