2009-07-31 6 views
0

私はこのようなテーブルを持っている:SQL Serverの最小

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の(正の最小)値を持つレコードを示す図を作成することができます本当ですか?

答えて

2
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両方のスポットで=「真」のチェックが必要最も低い得点が表示されます。

+0

ジャスティン - 私は「真のIS_MEMBER =は」行く必要だと思いますサブセレクト内。そうでなければ、最低の信用度を持つ人がメンバーでない場合、結果は返されません。 –

+0

@Ericキャッチをありがとう。あなたは両方のクエリでそれを必要とします...外側のクエリでそれを取り除くと、最も低いメンバに等しいスコアを持つ非メンバを得ることができます。 –

0

何か不足していますか?十分に簡単なようだ:

select min(Credit) as Credit 
from tblMembers 
where Is_Member = 'True' and Credit >= 0 
+1

最低クレジットを表示しているに過ぎず、クレジットが最も低いレコードは表示されません(Justin Niessnerのソリューションを参照) – JeffO

0
SELECT MIN(Credit), ID FROM tblMembers WHERE Is_Member="True" 
GROUP BY ID HAVING MIN(Credit) > 0 

私はしかし、これをoversimplifyingかもしれないと思います。自己責任。複数の行をするために接続することができることを

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

注:この基準を満たす複数のレコード...

SELECT * 
FROM tblMembers 
WHERE Credit = (
    SELECT MIN(Credit) 
    WHERE Credit > 0 
     AND Is_Member = 'True' 
) 
2

あなたはこのようになりますクエリを使用したいです最低の正の値であるため、複数の結果が得られる可能性があります。

2

があるかもしれません

1
SELECT * FROM tblMembers 
WHERE Credit = 
(SELECT MIN(Credit) FROM tblMembers WHERE Credit > 0 AND Is_Member = 'True') 
AND Is_Member = 'True' 

同じ(最低)のクレジットを持つ複数の行がある場合、複数の行が返されることに注意してください。

1

あなたは、あなたの基準に合った複数の記録を持つことになります。 SQLのあなたの味に応じて、

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

別名

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 
0

または

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

:あなただけの単一の行をしたい場合。これは1つのレコードしか与えません。他の人は、最小値を持つ複数のレコードがあるかもしれないと言っているからです。これは、サブクエリを排除

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

:何について

0

。あなたがランダムに一致する行の一つたい場合

0

は:

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 
関連する問題