如何在SQL Server中以单列显示父表数据和子表数据?

如何在SQL Server中以单列显示父表数据和子表数据?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在SQL Server中有两个表。第一个表有一个成员名称列,第二个表有其相关名称。我想在单列中显示两个表中的数据,就像若成员有任何亲属,那个么它必须立即显示在成员名称后的第二行中,若成员并没有任何亲属,那个么只能显示一行。例如,如下所示,有第一个memebrsname表及其cityname Regid Name City ---------------------------------------- 1 Dr. Dharmesh Patel

我在SQL Server中有两个表。第一个表有一个成员名称列,第二个表有其相关名称。我想在单列中显示两个表中的数据,就像若成员有任何亲属,那个么它必须立即显示在成员名称后的第二行中,若成员并没有任何亲属,那个么只能显示一行。例如,如下所示,有第一个memebrsname表及其cityname

Regid        Name             City
----------------------------------------
1    Dr. Dharmesh Patel       New york
2    Dr. Vivek Patel          New york
3    Dr. Udayan Kachchhi      New york
4    Dr. Geeti Maheshwari     New york
5    Dr. SHANKAR DAYAL        Arizona
6    Dr. Tejas Kakkad         New york
7    Dr. TUSHAR PATEL         California
8    Dr. Arpan Shah           New york
9    Dr. AMI PATEL            New york
亲属表
如下所示:

Regid   Name             City
-----------------------------------
6    MEETA KAKKAD        New york
1    Aditya Patel        New york
1    Namisha Patel       New york
3    Dimple Kachchhi     New york
4    Pankaj Maheshwari   New york
8    Agastya Shah        New york
8    Roma Shah           New york
regid        Name             City
---------------------------------------------
 1   Dr. Dharmesh Patel       New york
 1      Aditya Patel          New york
 1     Namisha Patel          New york

 2   Dr. Vivek Patel          New york
 3   Dr. Udayan Kachchhi      New york
 3       Dimple Kachchhi      New york
 4   Dr. Geeti Maheshwari     New york
 4      Pankaj Maheshwari     New york  
 5   Dr. SHANKAR DAYAL        Arizona
 6   Dr. Tejas Kakkad         New york
 6       MEETA KAKKAD         New york
 7   Dr. TUSHAR PATEL         California
 8   Dr. Arpan Shah           New york
 8       Agastya Shah         New york
 8       Roma Shah            New york

 9  Dr. AMI PATEL             New york
我想展示这样的结果:

Regid   Name             City
-----------------------------------
6    MEETA KAKKAD        New york
1    Aditya Patel        New york
1    Namisha Patel       New york
3    Dimple Kachchhi     New york
4    Pankaj Maheshwari   New york
8    Agastya Shah        New york
8    Roma Shah           New york
regid        Name             City
---------------------------------------------
 1   Dr. Dharmesh Patel       New york
 1      Aditya Patel          New york
 1     Namisha Patel          New york

 2   Dr. Vivek Patel          New york
 3   Dr. Udayan Kachchhi      New york
 3       Dimple Kachchhi      New york
 4   Dr. Geeti Maheshwari     New york
 4      Pankaj Maheshwari     New york  
 5   Dr. SHANKAR DAYAL        Arizona
 6   Dr. Tejas Kakkad         New york
 6       MEETA KAKKAD         New york
 7   Dr. TUSHAR PATEL         California
 8   Dr. Arpan Shah           New york
 8       Agastya Shah         New york
 8       Roma Shah            New york

 9  Dr. AMI PATEL             New york

如何在SQL Server中获得上述结果?请帮助

似乎您正在为regid订购的两个表寻找一个并集

SELECT Regid,Name,City FROM
(
SELECT Regid,Name,City FROM PARENT
UNION
SELECT Regid,Name,City FROM CHILD
) AS T1
ORDER BY Regid
select Regid, Name, City 
from table1 
union 
select Regid, Name, City 
from table2
order by regid
使用
row\u number()
函数和
union all
获取其父记录下的子记录

select *,
         row_number() over (partition by Regid order by Sort) Seq
from
(
    select Regid, Name, City, 1 AS Sort from parent p 
    UNION ALL
    select Regid, Name, City, 2 AS Sort from child c 
)t
您还可以定义显式排序

select Regid, Name, City, 1 AS Sort from parent p 
UNION ALL
select Regid, Name, City, 2 AS Sort from child c
order by  RegId, Sort

假设您希望缩进亲属的姓名。使用
seq
确保成员出现在其亲属面前:

select Regid, Name, City
from
(
select 1 as seq, Regid, Name, City 
from table1 
union all
select 2, Regid,'    ' + Name, City 
from table2 ) t
order by seq, Regid

您不应该使用
row_number()
而应该使用
order by Regid,Sort
@JamesZ。。。正确的。