如何将SQL行与空值合并

时间:2015-08-19 02:31:22

标签: sql sql-server tsql

我有相同数据的行,但每行都填充了不同的列。我想将所有这些行连接成一行。我尝试过group by,但数据集有1000列。有什么建议吗?

SELECT TOP 100 * 
FROM [Hilltopsamplerfix].[dbo].[tempHilltopWaterQualityExtractPivot]
WHERE [SiteName] = 'site' AND [RunDate] = 'xxx'

数据示例

我无法粘贴图片,因为我的声誉低于10

+------------------------------+
| Site column1 column2 column3 |
+------------------------------+
| SITE1 NULL   NULL    76      |
| SITE1 NULL   23      NULL    |
| SITE1 NULL   NULL    NULL    |
+------------------------------+

期望的输出:

+------------------------------+
| Site column1 column2 column3 |
+------------------------------+
| SITE1 NULL   23      76      |
+------------------------------+

2 个答案:

答案 0 :(得分:2)

您需要使用group by

select site, max(column1) as column1, max(column2) as column2, . . .
from [Hilltopsamplerfix].[dbo].[tempHilltopWaterQualityExtractPivot]
group by site;

您可以从information_schema.columns获取表中的列,并在SQL或Excel中构造逻辑。例如

select '    max(' + column_name + ') as ' + column_name + ', '
from information_schema.columns
where table_name = 'tempHilltopWaterQualityExtractPivot' and
      column_name <> 'site';

然后将结果复制到查询窗口中。

答案 1 :(得分:1)

尝试以下SQL,基于Gordon

Declare @Cols Varchar(Max)
select @Cols= coalesce(@Cols+',', '')+ ' max(' + column_name + ') as ' + column_name
from information_schema.columns
where table_name = 'tempHilltopWaterQualityExtractPivot' and Column_Name <> 'site'

Declare @Query Varchar(max)
SET @Query='Select Site, '+ @Cols+' From tempHilltopWaterQualityExtractPivot Group by Site'
EXEC(@Query)