2017-09-21 45 views
-3

由于我对同一时间戳有多行,因此有些查询有问题。SQL Server:将多行从内部连接表转换为单行

| 1 | 2017-09-21 08:52:18.000 | 120 | 255 | 0 | 0 | 0 | 0 |   | 
| 2 | 2017-09-21 08:52:18.000 |  |  | | | | | 17203200 |  

我想要的结果是

| R | 2017-09-21 08:52:18.000 | 120 | 255 | 0 | 0 | 0 | 0 | 17203200 | 

因为它是相同的数据,但因为它们是从不同的表,那么创建2个或更多的行,我想所有的压扁这一行值,如果两者都有值我想保持最高值。

+0

什么是你的选择第一行而不是第二的原理是什么?什么是表格结构,列名,...这是关于如何提问的一个很好的信息。 https://stackoverflow.com/help/mcve – Eric

+0

它看起来像你想行为像字符串连接。 STUFF可能是一个很好的使用方法,但是您需要利用最后一列的独特需求,您是否需要显示最后一列中的最大值,或者只是第一行列为空? –

+0

定义:“我想保持最高值。”最大组看起来像它会工作错误如果第3条第2条记录有130和第4条第2条记录有200你会混合/匹配值。你确定这是你想要的吗?或者它永远不会发生,因为只有时间戳记填写在“两个”记录“ – xQbert

回答

3

,您可以尝试

Declare @Table table (
Column1 int  
,Column2 datetime 
,Column3 int 
,Column4 int 
,Column5 int 
,Column6 int 
,Column7 int 
,Column8 int 
,Column9 int 
,Column10 int 
) 


INSERT @Table Values 
(1,'2017-09-21 08:52:18.000',120,255,0,0,0,0, NULL,NULL      ) 
,(2,'2017-09-21 08:52:18.000',NULL ,NULL , NULL, NULL, NULL, NULL,17203200,NULL) 


SELECT 
Column2 
,Max(Isnull(Column3 ,0)) Column3 
,Max(Isnull(Column4 ,0)) Column4 
,Max(Isnull(Column5 ,0)) Column5 
,Max(Isnull(Column6 ,0)) Column6 
,Max(Isnull(Column7 ,0)) Column7 
,Max(Isnull(Column8 ,0)) Column8 
,Max(Isnull(Column9 ,0)) Column9 
,Max(Isnull(Column10,0)) Column10 

FROM 
    @Table 
Group By 
Column2