• ベストアンサー

レコードの抽出

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文を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.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 ) ;

tatsukawa3
質問者

お礼

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

関連するQ&A