2015-12-04 1 views
0

У меня есть этот код работать:Как установить локальную переменную на конкретное значение в наборе результатов?

SELECT TOP 1 COUNT(*) AS NumSold, Game.Title 
FROM Game JOIN Purchase ON Game.GameID = Purchase.GameID 
GROUP BY Game.Title 
ORDER BY NumSold DESC ; 

Я хочу, чтобы сохранить GameID верхнего ряда к переменной.

Я пробовал это, но, похоже, не могу получить Идентификатор игры «игры» с самыми «закупочными» строками. Я могу подсчитать количество покупок в разных играх, когда я переключаю переменные из отчаяния.

SET @BestSellerID = (SELECT TOP 1 COUNT(Game.GameID) AS Best 
        FROM Game JOIN Purchase ON Game.GameID = Purchase.GameID 
        ORDER BY Best DESC 
        ); 

Я попытался ВЫБЕРИТЕ путь слишком (НЕПРАВИЛЬНО СИНТАКСИС NEAR TOP):

DECLARE @BestSellerID int; 

SELECT @BestSellerID = TOP 1 COUNT(Game.GameID) AS NumSold, Game.Title 
FROM Game JOIN Purchase ON Game.GameID = Purchase.GameID 
GROUP BY Game.Title 
ORDER BY NumSold DESC ; 

Разве это не возможно, потому что нет никакого способа, чтобы получить скалярный результат? Может кто-нибудь, пожалуйста, объясните мне, как получить переменную из набора результатов? Есть ли какая-то концепция, которую я пропускаю, есть ли специальный способ «поговорить» с запросами после того, как они были запрошены? Спасибо.

ОК с помощью пользовательского tshoemake и возится с синтаксисом это фиксированная моя проблема:

DECLARE @BestSellerID int; 

with cte_bs as 
(
SELECT TOP 1 COUNT(Game.GameID) AS NumSold, Game.GameID 
FROM Game JOIN Purchase ON Game.GameID = Purchase.GameID 
GROUP BY Game.GameID 
ORDER BY NumSold DESC 
) 
select @BestSellerID = (SELECT cte_bs.GameID FROM cte_bs) 
select @BestSellerID AS BestSellerGameID; 

ответ

1

Я вижу, вы выбираете два элемента (GameID и название). Я предполагаю, что он ищет только один GameID для хранения в локальной переменной. Это полный выстрел в темноте без данных образца, но попробуйте это или используйте это, чтобы добраться туда, где вам нужно.

DECLARE @BestSellerID int; 

with cte as 
(
SELECT TOP 1 COUNT(Game.GameID) AS NumSold, Game.GameID 
FROM Game JOIN Purchase ON Game.GameID = Purchase.GameID 
GROUP BY Game.GameID 
ORDER BY NumSold DESC 
) 
set @BestSellerID = select top 1 cte.GameID from cte 

select @BestSellerID 
+0

ошибка синтаксиса около «сверху» Но если код изменения не назначать: выберите top 1 cte.GameID из cte; Я получаю правильный GameID! Но это не позволит мне назначить переменную – MrPickles7

+0

Попробуйте это: set @BestSellerID = выберите top 1 cte.GameID from cte. Я также внесли некоторые изменения в исходный ответ, вы тоже захотите включить это. – tshoemake

+0

Все еще получать синтаксические ошибки из точки с запятой после DESC и установки var, существует ли другой синтаксис для выражений cte? – MrPickles7

0

Вы можете использовать ResultQuery Симметричного, чтобы сохранить его в локальной переменной в Java с базой данных Mysql

Мои предложения кода является:

ResultSet rs=st.executeQuery("SELECT TOP 1 COUNT(*) AS NumSold, Game.Title,Game.GameID 
    FROM Game JOIN Purchase ON Game.GameID = Purchase.GameID 
    GROUP BY Game.Title 
    ORDER BY NumSold DESC ;"); 
    if(rs.next()) 
    int GameID=rs.getInt("Game.GameID"); 

//You can use a array if you want to store large set of numbers 
+1

Спасибо, но я попал в sql-сервер – MrPickles7

Смежные вопросы