- ベストアンサー
レコードの抽出
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文を教えてください。
- みんなの回答 (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 ) ;
お礼
ありがとうございました。 無事、解決しました。