プロが教える店舗&オフィスのセキュリティ対策術

N1,N2,N3,N4,N5
1,3,17,20,25
2,11,12,21,30
1,8 10 24 30
11,12,14,20,31
8,9,15,21,25
2,11,16,24,29
2,11,12,13,28
8,19,21,23,30
17,18,19,20,30
上記のようなテーブルの中から、
”11以上20以下の数値が3つ以上含まれているレコード”を
抽出するためのSQL文を教えてください。

A 回答 (1件)

Access での回答になります。



横での計算は苦手なので、ユーザ定義関数を作成します。

Public Function Check11_20_3(ParamArray iNum()) As Boolean
  Dim i As Integer
  Dim iCount As Integer

  iCount = 0
  For i = LBound(iNum) To UBound(iNum)
    If ((iNum(i) >= 11) And (iNum(i) <= 20)) Then
      iCount = iCount + 1
    End If
  Next
  If (iCount >= 3) Then
    Check11_20_3 = True
  Else
    Check11_20_3 = False
  End If
End Function

テーブル名を miniloto と仮定した場合、クエリでは

SELECT N1, N2, N3, N4, N5
FROM miniloto
WHERE Check11_20_3(N1,N2,N3,N4,N5);

とします。


ミニロトのデータだと思いますが、他のフィールドに回はありますか?
回フィールドがあったとして(提示では1~11)


SELECT 回, N1, N2, N3, N4, N5
FROM miniloto
WHERE 回 IN (
SELECT 回 FROM
(SELECT 回, N1 AS N FROM miniloto
UNION
SELECT 回, N2 AS N FROM miniloto
UNION
SELECT 回, N3 AS N FROM miniloto
UNION
SELECT 回, N4 AS N FROM miniloto
UNION
SELECT 回, N5 AS N FROM miniloto)
GROUP BY 回
HAVING SUM(IIF(N >= 11 AND N <= 20,1,0)) >=3
)
;
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事、解決しました。

お礼日時:2009/11/03 18:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す