在同一行中插入多个记录设置升序数据

时间:2014-02-14 01:47:06

标签: sql-server row

我原来的问题与我的新发现和新问题不再相关。我重新发布了....可能是不,但我已经花了太多时间在这上面了。杀了我。

这是我的声明,它返回或用于返回我需要的数据

说明:

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名候选人。我正在努力......你认为我需要完全重申我的陈述吗?

1 个答案:

答案 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名称放在同一列中。嗯....我会搞清楚的。也许。公顷!

感谢。