Sql 为来自两个字段(其中一个字段通常为空)的不同数据创建查询
我有一个供玩家使用的表、一个供团队使用的表和一个供团队成员使用的表(使用SQLServer2005)。并不是所有的球员都在一个团队中。我想创建一个查询,为每个非团队球员返回一行,为每个团队返回一行(即,有一个结果行代表尼克斯队的所有20名球员,该结果行仅包含尼克斯队的球队id,但所有非团队球员在结果集中都有自己的带有唯一球员id的行) 我目前正在尝试让我的结果集只包含一列,并且我是这样做的:Sql 为来自两个字段(其中一个字段通常为空)的不同数据创建查询,sql,sql-server,Sql,Sql Server,我有一个供玩家使用的表、一个供团队使用的表和一个供团队成员使用的表(使用SQLServer2005)。并不是所有的球员都在一个团队中。我想创建一个查询,为每个非团队球员返回一行,为每个团队返回一行(即,有一个结果行代表尼克斯队的所有20名球员,该结果行仅包含尼克斯队的球队id,但所有非团队球员在结果集中都有自己的带有唯一球员id的行) 我目前正在尝试让我的结果集只包含一列,并且我是这样做的: SELECT DISTINCT ISNULL(tp.team_id, p.player_id) FROM
SELECT DISTINCT ISNULL(tp.team_id, p.player_id) FROM players p
LEFT JOIN team_players tp ON tp.player_id = p.id
我的问题是:我如何允许此查询按拥有最多球员描述的球队排序,然后按非球队球员姓名字母顺序排序?对于我当前的查询库,这可能吗?我是否应该使用不同的方法,比如工会,来实现这一点 与马丁的案例一样,这是未经测试的:
;with cteCombineData as (
select t.id, null as player_name, count(*) as player_count
from team t
inner join team_players tp
on t.id = tp.team_id
group by t.id
union all
select p.id, p.player_name, 0 as player_count
from players p
left join team_players tp
on p.id = tp.player_id
where tp.player_id is null
)
select id
from cteCombineData
order by player_count desc, player_name
看起来这正是我要找的。谢谢你,乔。老实说,在看到这种反应之前,我并不熟悉CTE。是时候做些阅读了:)。你可以从开始阅读开始,然后当你真的准备好阅读时