Where を 使った ソースコードを紹介する表示色の説明:ASP VBScriptは <% 〜 %> キーワードはWhere です。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SQL Select Where (項目1+項目2..) > 0 を入れ、0円をハジク</title>
</head>
<body>
<h1>SQL Select Where (項目1+項目2..) > 0 を入れ、0円をハジク</h1>
<pre>
Select T_月別売上.商品CD, T_商品.商品名,
売上4,売上5,売上6,売上7,売上8,売上9,
([売上4]+[売上5]+[売上6]+[売上7]+[売上8]+[売上9]) AS 上期計
From T_月別売上, T_商品
Where T_月別売上.商品CD = T_商品.商品CD
<b>AND ([売上4]+[売上5]+[売上6]+[売上7]+[売上8]+[売上9]) > 0</b>
UNION ALL
Select Left([T_月別売上.商品CD], 1) & 'ZZZZ' AS GroupCD
, '小計' AS Dummy商品名
, Sum([売上4]) , Sum([売上5]) , Sum([売上6])
, Sum([売上7]) , Sum([売上8]) , Sum([売上9])
, Sum([売上4]+[売上5]+[売上6]+[売上7]+[売上8]+[売上9]) AS 上期計
From T_月別売上, T_商品
Where T_月別売上.商品CD = T_商品.商品CD
Group By Left([T_月別売上.商品CD], 1) & 'ZZZZ'
Order By T_月別売上.商品CD
</pre>
と、SQL文を作成してみた。
<hr>
<%
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("db072.mdb")
db.open 'データベースを開く
'T_月別売上 から 商品コード、売上4〜9を取得する
strSQL = "Select T_月別売上.商品CD, T_商品.商品名,"
strSQL = strSQL & " 売上4,売上5,売上6,売上7,売上8,売上9,"
strSQL = strSQL & "([売上4]+[売上5]+[売上6]+[売上7]+[売上8]+[売上9]) AS 上期計"
strSQL = strSQL & " From T_月別売上, T_商品 "
strSQL = strSQL & " Where T_月別売上.商品CD = T_商品.商品CD "
'上期が0以上の条件を追加
strSQL = strSQL & " AND ([売上4]+[売上5]+[売上6]+[売上7]+[売上8]+[売上9]) > 0 "
'UNION ALL演算子をはさむ。
strSQL = strSQL & " UNION ALL"
'Sum集計関数で項目の合計を計算する
strSQL = strSQL & " Select Left([T_月別売上.商品CD], 1) & 'ZZZZ' AS GroupCD "
strSQL = strSQL & ", '小計' AS Dummy商品名 "
strSQL = strSQL & ", Sum([売上4]) , Sum([売上5]) , Sum([売上6])"
strSQL = strSQL & ", Sum([売上7]) , Sum([売上8]) , Sum([売上9])"
strSQL = strSQL & ", Sum([売上4]+[売上5]+[売上6]+[売上7]+[売上8]+[売上9]) AS 上期計"
strSQL = strSQL & " From T_月別売上, T_商品 "
strSQL = strSQL & " Where T_月別売上.商品CD = T_商品.商品CD "
strSQL = strSQL & " Group By Left([T_月別売上.商品CD], 1) & 'ZZZZ'"
'Order By 商品CD と商品コードで並べ替える
strSQL = strSQL & " Order By T_月別売上.商品CD"
Set rs = db.Execute(strSQL) 'SQL発行、レコードセットの作成
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しを(フィールド名を)そのまま書き込む
Response.Write "<TR>"
For Each fld_A In Rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TH>" & fld_A.Name & "</TH>"
'↑.Nameでフィールド名を表示する
Next
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する
For Each fld_A In Rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TD>" & fld_A.Value & "</TD>"
'↑.Valueでフィールドの値を表示する
Next
Response.Write "</TR>"
'次のレコードにポインタを移動する
rs.MoveNext 'これを忘れると悲惨なことに、、、
Loop
Response.Write "</TABLE>" 'テーブルは終わりです
'後始末
rs.Close '開いていたレコードセットを閉じる
db.Close 'データベースも閉じようよ
Set db = Nothing 'お行儀よくオブジェクトも開放しましょう
%>
<hr>
まだまだ、小計行が0表示されているが、明細行の0は消えました。<br>
</body>
</html>
| 最近発売の雑誌を紹介する
不健康なプログラマーさん達へ(オイオイ)こんな雑誌もあります。
- ESSE (エッセ) 2008年 06月号
- PLUS1 LIVING (プラスワン リビング) 2008年 06月号
- ELLE DECO (エル・デコ) 2008年 06月号
- ひとり暮らしをとことん楽しむ ! 2008年 06月号
- saita (サイタ) 2008年 06月号
- セラピスト 2008年 06月号
- Bagel (ベーグル) 2008年 06月号
- LEE (リー) 2008年 06月号
- 暮らしが好きになる本 2008年 06月号
|