Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将同一表格并排显示两次,但使用不同的过滤器_Sql_Tsql - Fatal编程技术网

Sql 将同一表格并排显示两次,但使用不同的过滤器

Sql 将同一表格并排显示两次,但使用不同的过滤器,sql,tsql,Sql,Tsql,我有一个表,我想显示两次,并排显示,其中该表在任意一侧按不同的标准进行过滤。这里是大致的 (这不是真实数据)表现在的样子 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 ----------------

我有一个表,我想显示两次,并排显示,其中该表在任意一侧按不同的标准进行过滤。这里是大致的 (这不是真实数据)表现在的样子

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。

尝试使用union

Union避免显示重复的数据,但可以按您要求的方式将其移动到列中

如果你能发布完整的查询,我可以更准确地演示

--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

“与结果表下方相反”:使用类似于
的方法,其中p1.PersonId
,这样您只能获得外部连接的一个组合。SQL Server不是显示/表示工具。这在Excel之类的软件中是很容易做到的。您应该使用客户端软件来实现这一点,但这是可能的:)请参见下文。我两次查询同一个表,并将其插入两个新表中,然后使用完全外部联接按行号联接它们,这样就可以按照我所希望的方式显示它们。只要左侧结果的数量至少与右侧结果的数量相同,这种方法就可以很好地工作。在
where
子句中交换
'Mark'
'Tim'
,结果只包括两行。
完全外部连接将解决此问题。谢谢!这并不完全是我所需要的,但是使用ROW_NUMBER()函数(我不熟悉)可以让我按行号完全连接表,所以最终这个响应帮助我找到了我需要的地方。我认为这是最好的答案。