詢問一條sql |
尚未結案
|
chrislao
初階會員 發表:86 回覆:69 積分:36 註冊:2002-12-28 發送簡訊給我 |
怎樣寫一條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 發送簡訊給我 |
|
t0922610976
一般會員 發表:11 回覆:16 積分:15 註冊:2003-09-02 發送簡訊給我 |
這個為交叉分析表,可利用下列程式來整理資料(當然也可用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 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 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 參考看看! =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |