全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:919
推到 Plurk!
推到 Facebook!

詢問一條sql

尚未結案
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-10 02:14:11 IP:202.175.xxx.xxx 未訂閱
怎樣寫一條sql語句把一個table由 date username bookid -------------------------------------- 2003-9-10 tom 100-1 2003-9-10 tom 100-2 2003-9-11 tom 100-3 2003-9-10 john 100-2 2003-9-10 john 100-4 變為 date username bookid1 bookid2 bookid3 bookid4 --------------------------------------------------------------------- 2003-9-10 tom 100-1 100-2 2003-9-11 tom 100-3 2003-9-10 john 100-2 100-4
ying0515
中階會員


發表:90
回覆:168
積分:81
註冊:2003-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-10 09:14:40 IP:61.218.xxx.xxx 未訂閱
可參考 http://delphi.ktop.com.tw/topic.php?topic_Id=33111 Delphi follower
------
Delphi
t0922610976
一般會員


發表:11
回覆:16
積分:15
註冊:2003-09-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-10 10:21:59 IP:210.64.xxx.xxx 未訂閱
這個為交叉分析表,可利用下列程式來整理資料(當然也可用storedprocedure來整理資枓,只是不好debug) procedure TsInv03030_SEL.GetCrossDataCallMethod(Params: Variant; out ReturnVal: Variant); var Year:String; Order_Month:Integer; CurrentCust_No:String; AFieldDef:TFieldDef; i:Integer; amount:Double; begin CurrentCust_No:=''; //從CallserverMethod取得參數(年份) Year:=Params; qryCrossData.Close; //取得資料來源 with qryCrossData.SQL do begin Add('SELECT * FROM ORDER_MASTER '); Add('WHERE ORDER_DATE>=' QuotedStr(Year '0101')); Add('AND ORDER_DATE<=' QuotedStr(Year '1231')); Add('ORDER BY Cust_No'); end; qryCrossData.Open; //建立客戶編號欄位定義 AFieldDef:=cdsCrossData.FieldDefs.AddFieldDef; //定義欄位型態 AFieldDef.DataType:=ftString; //定義欄位名稱 AFieldDef.Name:='CUST_NO'; //建立月統計欄位定義 for i:=1 to 12 do begin AFieldDef:=cdsCrossData.FieldDefs.AddFieldDef; AFieldDef.DataType:=ftFloat; AFieldDef.Name:=IntToStr(i); end; //建立合計欄位定義 AFieldDef:=cdsCrossData.FieldDefs.AddFieldDef; AFieldDef.DataType:=ftFloat; AFieldDef.Name:='Total'; //建立空的Dataset cdsCrossData.CreateDataSet; //不紀錄異動 cdsCrossData.LogChanges := False; while not qryCrossData.Eof do begin //比對公司編號是否與上一筆相同 if CurrentCust_No<>qryCrossData.FieldByName('CUST_NO').AsString then begin //Insert 一筆新的資料 cdsCrossData.Insert; CurrentCust_No:=qryCrossData.FieldByName('CUST_NO').AsString; cdsCrossData.Fields[0].AsString:=CurrentCust_No; //Default為0 for i:=1 to 13 do cdsCrossData.Fields[i].AsFloat:=0; cdsCrossData.Post; end; //取得月份 Order_Month:= StrToInt(copy(qryCrossData.FieldByName('ORDER_DATE').AsString,5,2)); if Order_Month=0 then Raise Exception.Create('Date Exception'); cdsCrossData.Edit; //取得訂單金額 amount:=qryCrossData.fieldByName('TOTAL_AMOUNT').AsFloat; //累計月欄位金額 cdsCrossData.Fields[Order_Month].AsFloat:= cdsCrossData.Fields[Order_Month].AsFloat amount; //累計總金額 cdsCrossData.Fields[13].AsFloat:=cdsCrossData.Fields[13].AsFloat amount; qryCrossData.Next; end; //將資料集傳回畫面 ReturnVal:=cdsCrossData.Data; end;
chrislao
初階會員


發表:86
回覆:69
積分:36
註冊:2002-12-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-10 19:46:36 IP:202.175.xxx.xxx 未訂閱
我的原意是把下圖的table 變為和下圖一樣的table
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-11 01:54:55 IP:63.84.xxx.xxx 未訂閱
您好!    Select A.Distinct(date), A.Username,  (Select B.bookid From Table1 B Where A.date=B.date and  B.bookid='100-1') As bookid1, (Select B.bookid From Table1 B Where A.date=B.date and B.bookid='100-2') As bookid2, (Select B.bookid From Table1 B Where A.date=B.date and B.bookid='100-3') As bookid3, (Select B.bookid From Table1 B Where A.date=B.date and B.bookid='100-4') As bookid4 From Table1 A Order By 2    參考看看!    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-06-27 2:53:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!