2017-07-18 68 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

嘗試使用聯合。

聯盟避免顯示重複的數據,但可以將它移動到列表中,就像它出現問題一樣。

如果您可以發佈完整查詢,我可以更準確地演示。

相關問題