SQL Server минимум всех положительных значений - PullRequest
0 голосов
/ 31 июля 2009

У меня есть такая таблица:

tblMembers
ID   Credit  Is_Member
---  ---     --- 
1    45      True
2    20      False
3    25      True
4    -10     True
5    -5      False
6    13      True

Как создать представление, отображающее запись со значением (Минимальное положительное значение) Кредит и Is_Member = "True"?

Ответы [ 10 ]

2 голосов
/ 31 июля 2009

Вы бы использовали запрос, который выглядит примерно так:

SELECT *
FROM tblMembers
WHERE Credit = (SELECT MIN(Credit)
    FROM tblMembers
    WHERE Is_Member = TRUE AND Credit > 0)
AND Is_Member = TRUE

Обратите внимание, что несколько строк могут быть связаны для наименьшего положительного значения, поэтому вы можете получить более одного результата.

2 голосов
/ 31 июля 2009

Может быть несколько записей, соответствующих этому критерию ...

SELECT *
FROM tblMembers
WHERE Credit = (
    SELECT  MIN(Credit)
    WHERE   Credit > 0
        AND Is_Member = 'True'
)
2 голосов
/ 31 июля 2009
select min(credit) 
from tblMembers
where Is_Member = 'true'
    and credit > 0

... и если это домашнее задание, отметьте его как таковое (ответы могут быть разными).

EDIT

Не правильно прочитал вопрос.

select * from tblMembers
where credit = (select min(credit)
    from tblMembers
    where credit > 0
        and Is_Member = 'true')
and Is_Member = 'true'

... вам нужно проверить Is_Member = 'true' в обоих точках, потому что наименьший кредитный балл может быть не у участника (что не даст результатов), а неучастник и участник могут иметь самый низкий балл, но только участник должен показать.

1 голос
/ 31 июля 2009

Вы обязаны иметь несколько записей, которые соответствуют вашим критериям. Если вы хотите только одну строку:

create view PositiveCreditMember
as
select top 1
    ID
,   credit
,   is_member
from
    tblMembers
where 
    credit in (
      select
         min(Credit) 
      from
         tblMembers
      where
        credit > 0
        and is_member = 'True'
    )
    and is_member = 'True'
order by ID
1 голос
/ 31 июля 2009
SELECT * FROM tblMembers
WHERE Credit = 
(SELECT MIN(Credit) FROM tblMembers WHERE Credit > 0 AND Is_Member = 'True')
AND Is_Member = 'True'

Обратите внимание: если у вас более одной строки с одинаковым (минимальным) кредитом, будет возвращено более одной строки.

0 голосов
/ 03 августа 2009

Если вы хотите, чтобы одна из подходящих строк была случайной:

select top 1 * from tblMembers where Is_Member = 1 order by credit

или, если вы хотите, чтобы все соответствующие строки:

select top 1 with ties * from tblMembers where Is_Member = 1 order by credit
0 голосов
/ 02 августа 2009

А как же:

CREATE VIEW vwXYZ
AS
SELECT TOP 1 *
FROM tblMembers
WHERE [Is_Member] = 1
AND Credit > 0
ORDER BY Credit;

Это исключает подзапрос.

0 голосов
/ 31 июля 2009

или

select * from credit
where is_member = 'true'
and   credit > 0
order by credit
limit 1

ака

select top 1 * from credit
where is_member = 'true'
and   credit > 0
order by credit

в зависимости от вашего вкуса SQL. Это дает только одну запись; как уже говорили другие, может быть несколько записей с минимальным значением.

0 голосов
/ 31 июля 2009
SELECT MIN(Credit), ID FROM tblMembers WHERE Is_Member="True"
GROUP BY ID HAVING MIN(Credit) > 0

Я думаю, что, возможно, я слишком упрощаю это. Используйте на свой страх и риск.

0 голосов
/ 31 июля 2009

Я что-то упустил? Это кажется достаточно простым:

select min(Credit) as Credit 
from tblMembers 
where Is_Member = 'True' and Credit >= 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...