Как получить выбранные строки столбцов между х и у - PullRequest
0 голосов
/ 13 февраля 2011

Я пытаюсь написать запрос, который возвращает мне выбранные строки столбцов на основе значений строк x и y другого столбца.

Но следующий запрос возвращает мне все строки двух выбранных столбцов, хотя я указал диапазон. Может кто-нибудь сказать мне, что я делаю не так?

select username, password 
from loginuser 
group by username, password 
having count(id) between '1' and '2'

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Оператор HAVING должен применяться к агрегатным функциям - если вы хотите выбрать те строки, где SUM превышает определенное значение или что-то еще.

Вы просто хотите сделать регулярный выбор - используйтеWHERE предложение для этого:

SELECT username, password 
FROM dbo.loginuser 
WHERE id BETWEEN 1 and 2

Это выберет все строки, где значение ID находится в диапазоне от 1 до 2.

Если вы хотите выбрать по номеру строки, упорядоченыпо идентификатору - вам нужно что-то вроде этого:

;WITH RowNumberValues AS
(
   SELECT username, password,
          ROW_NUMBER() OVER(ORDER BY ID) AS 'RowNum' 
   FROM dbo.loginuser 
)
SELECT username, password
FROM RowNumberValues
WHERE RowNum BETWEEN 1 AND 2

Если у вас нет SUM или COUNT в вашем запросе, вы не должны использовать GROUP BY либо ...

Это то, что вы ищете ??Исходя из вашего вопроса и запроса, не совсем понятно, что вы на самом деле ищете ... не могли бы вы описать более подробно что вы хотите выбрать '?

1 голос
/ 13 февраля 2011

Почему ваш запрос не работает

select username, password 
from loginuser 
group by username, password 
having count(id) between '1' and '2'

Примечание: COUNT () возвращает int. SQL Server преобразует ваши в кавычки (в следующий раз, пожалуйста, не надо) '1' and '2' и присваивает им целочисленные значения 1 and 2.

Запрос означает:

  • ОТ : получить данные из таблицы loginuser
  • GROUP BY : для каждого DISTINCT набора имени пользователя и пароля группируйте их вместе
  • SELECT : во время группировки извлеките столбцы username, password и вычислите count(id), то есть сколько строк с этими ЖЕ ИМЕНИМ имени пользователя и пароля
  • HAVING : используя произведенные подсчеты, ограничьте результаты только теми, в которых уникальная комбинация имени пользователя и пароля появляется ТОЧНО один или два раза в таблице

Что ты хотел?

Первые две разные комбинации имени пользователя и пароля, в произвольном порядке?

select TOP 2 username, password 
from loginuser 
group by username, password 

Последние две строки для каждой отдельной комбинации имени пользователя и пароля в таблице loginuser? (вам нужно предложение PARTITION BY)

select username, password 
from
(
  select *, rn=row_number() over (
    partition by username, password order by id desc)
  from loginuser
) X
WHERE rn between 1 and 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...