在SQL Server 2012或Excel 2013中格式化结果

我在从SQL查询中获取输出时遇到了麻烦,现在我有几个查询,在这里我自己join到一个表中,以比较符合我的标准的帐户的logging。 一个简单的例子看起来像这样:

SELECT a.Field1 ,a.Field2 ,a.Field3 ,b.Field1 ,b.Field2 ,b.Field3 FROM Table1 a JOIN Table1 b ON a.Field = b.Field 

a和b的输出在同一行,我想尝试让它们堆叠在一起。 有时候有1000条logging被返回。 是否有一个简单的方法,让B字段堆积在相应的字段下? 经过一番研究,我无法弄清楚这样做的有效方法,不是完全手动和耗时的。

编辑:

我对我的第一篇文章缺乏信息表示歉意。 这是我的一个查询看起来更好的代表。

  SELECT DISTINCT a.ID ,a.Field1 ,a.Field2 ,a.Field3 ,a.Field4 ,a.Field5 ,a.Field6 ,b.ID ,b.Field1 ,b.Field2 ,b.Field3 ,b.Field4 ,b.Field5 ,b.Field6 FROM Table1 a JOIN Table1 b ON a.somefield = b.somefield AND a.anotherfield = b.anotherfield WHERE a.ID > b.ID AND a.thisfield <> b.thisfield AND a.field1 = 'something' AND b.field1 = 'something' 

鉴于一些领域不一定是平等的标准仍然是最合乎逻辑的方式的联合?

是否有一个简单的方法,让B字段堆积在相应的字段下?

 SELECT Field1 ,Field2 ,Field3 FROM ( SELECT a.Field1 ,a.Field2 ,a.Field3 ,a.Field FROM Table1 a UNION ALL SELECT b.Field1 ,b.Field2 ,b.Field3 ,b.Field FROM Table1 b ) t ORDER BY Field ASC 

编辑下面的原始问题编辑:

你需要使用一个联合来获得你想要的格式,但是我将从你当前的查询开始,作为一个CTE,并使用一个从它中抽取的UNION,如下所示:

 WITH cte AS ( SELECT DISTINCT a.ID AS A_ID ,a.Field1 AS A_Field1 ,a.Field2 AS A_Field2 ,a.Field3 AS A_Field3 ,a.Field4 AS A_Field4 ,a.Field5 AS A_Field5 ,a.Field6 AS A_Field6 ,b.ID AS B_ID ,b.Field1 AS B_Field1 ,b.Field2 AS B_Field2 ,b.Field3 AS B_Field3 ,b.Field4 AS B_Field4 ,b.Field5 AS B_Field5 ,b.Field6 AS B_Field6 FROM Table1 a JOIN Table1 b ON a.somefield = b.somefield AND a.anotherfield = b.anotherfield WHERE a.ID > b.ID AND a.thisfield <> b.thisfield AND a.field1 = 'something' AND b.field1 = 'something' ) SELECT A_ID ,B_ID ,A_Field1 ,A_Field2 ,A_Field3 ,A_Field4 ,A_Field5 ,A_Field6 FROM cte UNION ALL SELECT A_ID ,B_ID ,B_Field1 ,B_Field2 ,B_Field3 ,B_Field4 ,B_Field5 ,B_Field6 FROM cte ORDER BY A_ID, B_ID 

如果你绝对必须在结果中堆叠ID列,那么你需要把UNION放在派生表中,就像我在第一个例子中那样。 但是你需要在UNION查询中使用这两个ID来获得行顺序。