Этот запрос работает отлично:Выборы запросов Надеюсь последний один
select rc.[race number],
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 [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
from
(
select 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]
Теперь у меня есть еще одно поле из RACE КАНДИДАТАМ TABLE, который должен отображаться в запросе. Он возвращает 0 для проигравшего и 1 для победителя. Этот столбец называется Winner. Когда я запускаю следующий запрос:
select rc.[race number],
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 winner 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 winner end) as LoserSelected
from
(
select 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]
Я получаю сообщение об ошибке, которое утверждает: «Msg 8117, уровень 16, состояние 1, строка 6 Операнда типа данных бит недействителен для максимального оператора.»
Означает ли это, что я могу быть привинчен? Потому что в моем первом заявлении у меня есть кандидат с псевдонимом «Победитель», возможно, если бы я изменил это, это исчезло бы. Это то, что вызывает ошибку? Или это из-за возврата «0» или «1»?
Когда я запустил SELECT * FROM [RACE CANDIDATES]
, он возвращает столбец победителя с правильными «0» или «1».
Это мой последний вопрос, я обещаю.
Спасибо всем, кто направил меня через эту катастрофу.
Есть ли способ, которым я могу обойти это? По-прежнему позволяя побеждаемым выбранным и проигравшим столбцам заполнять один набор строк? – user3242661
Теперь, когда я просмотрел URL-адрес, опубликованный выше, могу ли я использовать MIN вместо max? или будет ли это fubar результаты? – user3242661
Только что обновил мой ответ с возможным решением. – Shiva