我原来的问题与我的新发现和新问题不再相关。我重新发布了....可能是不,但我已经花了太多时间在这上面了。杀了我。
这是我的声明,它返回或用于返回我需要的数据
说明:
select rc.[race number] AS RaceNumber,
max(case when seqnum = 1 then title1 end) as title1,
max(case when seqnum = 1 then [precinct percent] end) as PrecintPercent,
max(case when seqnum = 1 then [candidate num] end) as Winner,
max(case when seqnum = 1 then Votes end) as WinningVotes,
max(case when seqnum = 1 then party end) as WinningParty,
max(case when seqnum = 1 then leader end) as Winner1,
max(case when seqnum = 1 then CAST(winner AS tinyint) end) as WinnerSelected,
max(case when seqnum = 1 then [leader percent] end) as WinnerPercent,
max(case when seqnum = 2 then [candidate num] end) as Loser,
max(case when seqnum = 2 then Votes end) as LosingVotes,
max(case when seqnum = 2 then party end) as LosingParty,
max(case when seqnum = 2 then leader2 end) as Loser2,
max(case when seqnum = 2 then [leader2 percent] end) as LoserPercent,
max(case when seqnum = 2 then CAST(winner AS tinyint) end) as LoserSelected
from
(
select
r.title1,
r.[precinct percent],
rc.[race number],
rc.[candidate num],
rc.[Votes],
rc.[winner],
c.[party],
r.[leader],
r.[leader percent],
r.[leader2],
r.[leader2 percent],
row_number() over (partition by rc.[race number] order by votes desc) as seqnum
from dbo.[RACE CANDIDATES] rc
inner join dbo.[CANDIDATE] c on rc.[candidate num] = c.[candidate number]
inner join dbo.[RACE] r
on rc.[race number] = r.[race number]
) rc
group by rc.[race number]
这将返回2个候选人的投票总数和区域百分比以及与之相关的种族。现在我已经注意到有一些比赛有3个最多5个候选人与一个种族相关联,所以这不再起作用了。我的意思是......它有效,但它只返回一个拥有3个或更多候选人的前2名候选人。可以这样做吗?我可以从[CANDIDATE]表中提取额外的候选者,但不确定如何将它们放在同一行集中或同一种族中。 Canddate Number是它唯一的关系,所以我真的没有有效的列来获取这些数据。我正在寻找我需要的专栏,但还没有找到它。我总共有13张桌子可供选择。好悲伤。希望这有一定道理。感谢您的意见和帮助!
好的,领导者和领导者2是专栏。领导者是目前最高票数的候选人,领导者2是候选人失败。
我找到了列的名字和姓氏,有我需要的名字。他们藏在[CANDIDATE]表中。他们的投票在[RACE CANDIDATES]表中。我只是不知道如何在我的上述声明中对它们进行排序,因此每个候选人(拳头名和姓)跟随他们的投票总数是升序。例如,候选人1为胜者,候选人2为胜利者2,候选人3为失败者,候选人4为失败者。我知道我没有任何意义,但我只想让所有候选人在一排和一场比赛中。这就是我用上述声明所能完成的,但在一些比赛中有超过2名候选人。我正在努力......你认为我需要完全重申我的陈述吗?
答案 0 :(得分:0)
咄。
select rc.[race number] AS RaceNumber,
max(case when seqnum = 1 then title1 end) as title1,
max(case when seqnum = 1 then [precinct percent] end) as PrecintPercent,
max(case when seqnum = 1 then [candidate num] end) as Winner,
max(case when seqnum = 1 then Votes end) as WinningVotes,
max(case when seqnum = 1 then party end) as WinningParty,
max(case when seqnum = 1 then leader end) as Winner1,
max(case when seqnum = 1 then CAST(winner AS tinyint) end) as WinnerSelected,
max(case when seqnum = 1 then [leader percent] end) as WinnerPercent,
max(case when seqnum = 2 then [candidate num] end) as Loser,
max(case when seqnum = 2 then Votes end) as LosingVotes,
max(case when seqnum = 2 then party end) as LosingParty,
max(case when seqnum = 2 then leader2 end) as Loser2,
max(case when seqnum = 2 then [leader2 percent] end) as LoserPercent,
max(case when seqnum = 2 then CAST(winner AS tinyint) end) as LoserSelected,
max(case when seqnum = 3 then [candidate num] end) as Winner3,
max(case when seqnum = 3 then Votes end) as Winner3Votes,
max(case when seqnum = 3 then party end) as Winner3Party,
max(case when seqnum = 3 then [first name]end) as Winner3FirstName,
max(case when seqnum = 3 then [last name]end) as Winner3LastName,
max(case when seqnum = 3 then CAST(winner AS tinyint) end) as Winner3Selected,
max(case when seqnum = 4 then [candidate num] end) as Loser4,
max(case when seqnum = 4 then Votes end) as Loser4Votes,
max(case when seqnum = 4 then party end) as Loser4Party,
max(case when seqnum = 4 then [first name]end) as Loser4FirstName,
max(case when seqnum = 4 then [last name]end) as Loser4LastName,
max(case when seqnum = 4 then CAST(winner AS tinyint) end) as Loser4Selected
from
(
select
r.title1,
r.[precinct percent],
rc.[race number],
rc.[candidate num],
rc.[Votes],
rc.[winner],
c.[party],
r.[leader],
r.[leader percent],
r.[leader2],
r.[leader2 percent],
c.[first name],
c.[last name],
row_number() over (partition by rc.[race number] order by votes desc) as seqnum
from dbo.[RACE CANDIDATES] rc
inner join dbo.[CANDIDATE] c on rc.[candidate num] = c.[candidate number]
inner join dbo.[RACE] r
on rc.[race number] = r.[race number]
) rc
group by rc.[race number]
当我为XML路径时,它会自动省略没有候选者的比赛的空结果。拍摄......我需要将First和Last名称放在同一列中。嗯....我会搞清楚的。也许。公顷!
感谢。