我正在使用SQL 2008 R2。
这是我的样本:
Class Name1 Quantity1 Name2 Quantity2 Name3 Quantity3
AAA Jane 6 '' '' '' ''
AAA '' '' Jim 12 '' ''
AAA '' '' '' '' Hons 2
我如何选择数据,以便得到如下结果:
Class Name1 Quantity1 Name2 Quantity2 Name3 Quantity3
AAA Jane 6 Jim 12 Hons 2
请告知。
感谢。
答案 0 :(得分:2)
假设您的所有列都是varchar
(或类似的非数字类型),并且示例数据中的空单元格确实是空字符串,则以下内容应该有效:
SELECT Class,
MAX(CASE WHEN Name1 = '' THEN NULL ELSE Name1 END) AS Name1,
MAX(CASE WHEN Quantity1 = '' THEN NULL ELSE Quantity1 END) AS Quantity1,
MAX(CASE WHEN Name2 = '' THEN NULL ELSE Name2 END) AS Name2,
MAX(CASE WHEN Quantity2 = '' THEN NULL ELSE Quantity2 END) AS Quantity2,
MAX(CASE WHEN Name3 = '' THEN NULL ELSE Name3 END) AS Name3,
MAX(CASE WHEN Quantity3 = '' THEN NULL ELSE Quantity3 END) AS Quantity3
FROM yourTable
GROUP BY Class
这里的技巧是SQL Server中的MAX()
ignores NULL
values。在这里,我们想要忽略空单元格,只获取真实的文本数据。另一个假设是每列只有一个实际数据,每Class
。
如果您的NULL
值不存在真实数据,那么您只需在每列中使用MAX(col)
即可。
答案 1 :(得分:1)
您可以使用MAX:
SELECT [Class],
MAX(Name1) as Name1,
MAX(Quantity1 ) as Quantity1,
MAX(Name2) as Name2,
MAX(Quantity2) as Quantity2,
MAX(Name3) as Name3,
MAX(Quantity3) as Quantity3
FROM YourTableName
GROUP BY [Class]