如何在sql中按文本求和或分组

时间:2016-05-23 08:01:39

标签: sql-server

我正在使用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

请告知。

感谢。

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]