2017-07-18 64 views
0

我有两张并排显示的表格,其中表格根据不同的标准在两侧进行过滤。所以这里大概是 (这不是真正的数据)现在表的外观。并排显示同一个表格两次,但使用不同的过滤器

Name |1st|2nd|3rd 
------------------- 
Mark |1 | 2 | 3 
Mark |2 | 4 | 6 
Mark |3 | 6 | 8 
Tim |6 | 2 | 4 
Tim |10 | 11| 1 

我想结果看起来像这样:

Name1|1st|2nd|3rd Name2|1st|2nd|3rd 
------------------------------------- 
Mark | 1 | 2 | 3 | Tim | 6 | 2 | 4 
Mark | 2 | 4 | 6 | Tim | 10| 11| 1 
Mark | 3 | 6 | 8 | 

所以我可以并排看到马克和蒂姆的结果侧。

当我完成一个完整的外连接时,我得到它,以便我可以看到表的第一个版本的所有结果,其中第二个为null,结果表中的结果为反向。这是预期的,但我想知道如何显示它,如果可能的话我想要的。使用t-sql。

+0

“和反向的成绩表下”:使用像'那里p1.PersonId AaronLS

+2

SQL Server不是一个显示/演示工具。这在Excel中很容易实现。 – RBarryYoung

+0

你应该使用客户端软件来做类似的事情 – Paparazzi

回答

0
--creating table 
with myTable as (
select 'mark' as Name , 1 as [1st] , 2 as [2nd] , 3 as [3rd] 
union 
select 'mark' as Name , 2 as [1st] , 4 as [2nd] , 6 as [3rd] 
union 
select 'mark' as Name , 3 as [1st] , 6 as [2nd] , 8 as [3rd] 
union 
select 'Tim' as Name , 6 as [1st] , 2 as [2nd] , 4 as [3rd] 
union 
select 'Tim' as Name , 10 as [1st] , 11 as [2nd] , 1 as [3rd] 
) 

--query 
select * from (
select ROW_NUMBER()over (order by a.name) as Row , * from myTable as a 
where Name= 'Mark')x 
left join (
select ROW_NUMBER()over (order by a.name) as Row , * from myTable as a 
where Name= 'Tim')y 
on x.Row = y.Row 

这里是结果:

Row     Name 1st   2nd   3rd   Row     Name 1st   2nd   3rd 
-------------------- ---- ----------- ----------- ----------- -------------------- ---- ----------- ----------- ----------- 
1     mark 1   2   3   1     Tim 6   2   4 
2     mark 2   4   6   2     Tim 10   11   1 
3     mark 3   6   8   NULL     NULL NULL  NULL  NULL 
+1

只要_left_结果至少与_right_结果一样多,就可以很好地工作。在'where'子句中交换'Mark'和'Tim',结果只包含两行。一个完整的外连接将解决这个问题。 – HABO

+0

谢谢!这并不是我所需要的,但是使用ROW_NUMBER()函数(我不熟悉的东西)让我用行号完全加入表格,所以最终这个响应帮助我得到了我需要去的地方。我将其标记为最佳答案。 –

0

尝试使用联合。

联盟避免显示重复的数据,但可以将它移动到列表中,就像它出现问题一样。

如果您可以发布完整查询,我可以更准确地演示。

相关问题