1

私は以下のような質問があります:

select column_date, field1, field2, sum(field3) from table1
where field1 like '*xyz' and 
column_date between [please enter start date] and [please enter end date]
group by column_date, field1, field2

両方のパラメータボックスを空白のままにすると、出力が空白になります。しかし、私はそれらを以下のように出力したい

  1. 両方のパラメータボックスを空白のままにしたときにすべてのレコードを表示したい
  2. パラメータボックスのいずれかに日付を入力すると、その日付のレコードのみが表示されます。
  3. 両方のパラメータボックスに日付を入力すると、それらの日付の間のすべてのレコードが表示されます。

これは、出力を表示するための私のaspコードです。両方のテキストボックスに値を挿入すると機能しますが、いずれかまたは両方を空白のままにすると、エラーが表示されます。

<html>
<body>
<%
dim startdate, enddate
startdate = Request.Form ("startdate")
enddate = Request.Form("enddate")
set conn = Server.CreateObject ("ADODB.Connection")
conn.open "connectionname"
set rs = Server.CreateObject ("ADODB.Recordset")
Sqlquery = "queryname '" & startdate & "', '" & enddate &'" "
rs.open sql, conn %>
<table>
<tr>
<%
For each x in rs.fields
response.write ("<th>" & x.name & "</th>") 
next %> </tr>
<tr><% Do Until rs.EOF %>
<% For each x in rs.Fields %>
<td>Response.write (x.value)</td>
<%next
rs.movenext %>
</tr>
<% loop
rs.close
conn.close %>
</table>
</body>
</html>
4

1 に答える 1

1

WHERE句を理解するために、単純なSELECTクエリから始めます。これが正しく機能するようになったら、GROUPBYクエリに変換します。

したがって、これが正しいレコードを対象としているかどうかを確認してください。

PARAMETERS [Start Date] DateTime, [End Date] DateTime;
SELECT t.field1, t.field2, t.field3, t.column_date
FROM table1 AS t
WHERE
       t.field1 Like '*xyz'
    AND (         
       (t.column_date Between [Start Date] And [End Date])
    OR ([Start Date] Is Null And t.column_date = [End Date])
    OR (t.column_date = [Start Date] And [End Date] Is Null)
    OR ([Start Date] Is Null And [End Date] Is Null)
       );

最初のクエリが正しい行を返すと仮定すると、このGROUPBYクエリはあなたが望むものを与えるかもしれないと思います。

PARAMETERS [Start Date] DateTime, [End Date] DateTime;
SELECT t.column_date, t.field1, t.field2, sum(t.field3)
FROM table1 AS t
WHERE
       t.field1 Like '*xyz'
    AND (         
       (t.column_date Between [Start Date] And [End Date])
    OR ([Start Date] Is Null And t.column_date = [End Date])
    OR (t.column_date = [Start Date] And [End Date] Is Null)
    OR ([Start Date] Is Null And [End Date] Is Null)
       )
GROUP BY t.column_date, t.field1, t.field2;

従来のASPからこのクエリを実行する場合は%、Accessスタイル*のワイルドカードをANSIワイルドカード文字に置き換える必要があります。

t.field1 Like '%xyz'

またはALike、の代わりにANSIワイルドカードを使用することを検討してLikeください。そうすれば、ワイルドカードを切り替えることなく、クエリは常に同じように動作します。

t.field1 ALike '%xyz'

また、従来のASPでは、ADOコマンドオブジェクトからクエリを実行し、パラメーターの値を指定します。

于 2012-07-08T23:50:10.803 に答える