表格问题 |
答題得分者是:st33chen
|
nadawudi
一般會員 發表:6 回覆:7 積分:2 註冊:2008-12-01 發送簡訊給我 |
各位好,小弟有个问题急需帮助:
我有一个表,表格式大概如下: 店名 产品 数量 价格 (4个字段) 1 青苹果 17 20 空白 火龙果 200 1362 空白 丽佳果 19 65 空百 哈秘瓜 20 300 2 青苹果 25 300 空白 火龙果 200 1400 空白 丽佳果 20 70 空白 哈秘瓜 20 320 3 青苹果 15 15 空白 丽佳果 30 450 空白 火龙果 20 150 空白 哈秘瓜 20 280 我现在想通过一个按件上写SQL语句能够使当记录指针在店名字段为1时开始,后面该字段的空白初自动填上1,一直到字段值变为2位置,后面的字段值全为2,一直到3,以此类推. 另外如果SQL不能解决,能够用其他方法吗. 如有高人指点,小弟感激不尽 |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好, 這題我覺得首先要確定 1. 您是 只要查詢資料 還是 要把資料寫回資料 如果是 要查詢資料, 那 2. 使用何種 db engine 3. keyfield 是什麼(照經驗 keyfield 應為 店名, 產品 但是和您的提供的資料矛盾) 假設 要把資料寫回資料表, 那我覺得用最直觀的方法最快 : var astr : string; query1.sql.text :='select 店名, 產品, 數量, 价格 from table1'; query1.open; while not query1.eof do begin if trim(query1.fieldbyname('店名').asstring)<>'' then astr := query1.fieldbyname('店名').asstring else begin query1.edit; query1.fieldbyname('店名').asstring := astr; query1.post; end; query1.next; end; query1.close;
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-01-20 21:35:24, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
如果資料真如你所列示的安排的話, 最直接的寫法就是利用迴圈, 我只寫個大概沒有實測
假設table name 是 mydata var i: integer; fdvalue: integer; begin i:= 0; mydata.first; while not mydata.eof do begin fdvalue:= StrtoIntDef(mydata.FieldByName('店名').AsInteger,0) if fdvalue<>0 then i:= fdvalue else begin mydata.edit; mydata.FieldByName('店名').Value:= InttoStr(i); mydata.post; end; mydata.next; end; end; 當然, 整個回存我不知道你用什麼資料庫, 請自行參考其他資訊 寫法萬千種, 任人自由發揮 ===================引 用 nadawudi 文 章=================== 各位好,小弟有个问题急需帮助: 我有一个表,表格式大概如下: 店名 产品 数量 价格 (4个字段) 1 青苹果 17 20 空白 火龙果 200 1362 空白 丽佳果 19 65 空百 哈秘瓜 20 300 2 青苹果 25 300 空白 火龙果 200 1400 空白 丽佳果 20 70 空白 哈秘瓜 20 320 3 青苹果 15 15 空白 丽佳果 30 450 空白 火龙果 20 150 空白 哈秘瓜 20 280 我现在想通过一个按件上写SQL语句能够使当记录指针在店名字段为1时开始,后面该字段的空白初自动填上1,一直到字段值变为2位置,后面的字段值全为2,一直到3,以此类推. 另外如果SQL不能解决,能够用其他方法吗. 如有高人指点,小弟感激不尽 |
nadawudi
一般會員 發表:6 回覆:7 積分:2 註冊:2008-12-01 發送簡訊給我 |
通过你的方法,问题解决了,
但是我想实现另外一个功能 我通过SQL.text:='select 产品,sum(价格) as sum_价格 from table1 group by 产品';这句查出了整个表格所有的同类产品的各自的总价; 但是我现在是想在店名为1所有记录中查出所有同类产品的总价,(由于为了方便我上面的表格中每个店名中的产品只有一项,而实际上同类产品有很多项,只是数量不同,单次价格也就不一样),并插入一些新记录,这些新记录分别插入到店名1中所对应的产品类后面,用于显示店名1中各种产品的总价[这些记录包括店名,产品,数量,价格(这个字段为空),sum_价格(新字段)] 我的表店名1中已经按照产品种类顺序排好,希望各位高手能够帮帮我,谢谢 ===================引 用 st33chen 文 章=================== 您好, 這題我覺得首先要確定 1. 您是 只要查詢資料 還是 要把資料寫回資料 如果是 要查詢資料, 那 2. 使用何種 db engine 3. keyfield 是什麼(照經驗 keyfield 應為 店名, 產品 但是和您的提供的資料矛盾) 假設 要把資料寫回資料表, 那我覺得用最直觀的方法最快 : var astr : string; query1.sql.text :='select 店名, 產品, 數量, 价格 from table1'; query1.open; while not query1.eof do begin if trim(query1.fieldbyname('店名').asstring)<>'' then astr := query1.fieldbyname('店名').asstring else begin query1.edit; query1.fieldbyname('店名').asstring := astr; query1.post; end; query1.next; end; query1.close; |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
mssql, mysql :
select 店名, 產品, sum(价格) as sum_价格 from table1 group by 店名, 產品 with rollup oracle : select 店名, 產品, sum(价格) as sum_价格 from table1 group by rollup(店名, 產品) 或請自行 google 一下 rollup
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
nadawudi
一般會員 發表:6 回覆:7 積分:2 註冊:2008-12-01 發送簡訊給我 |
这样只能查找,如何将各产品的总值添加到各类产品记录的后一个记录呢
能够用一句SQL语句完成吗,我现在是一条条填在空件里加进去,太麻烦 我的表给类产品是分开的,也就是一种产品可能有10条信息,占了前10个记录,后面又是另一种产品,产品在排序方面没有混淆, 我想的是查找完后,程序可以自动的在各类产品的记录后面添加一个该产品的总价. ===================引 用 st33chen 文 章=================== mssql, mysql : select 店名, 產品, sum(价格) as sum_价格 from table1 group by 店名, 產品 with rollup oracle : select 店名, 產品, sum(价格) as sum_价格 from table1 group by rollup(店名, 產品) 或請自行 google 一下 rollup
編輯記錄
nadawudi 重新編輯於 2009-01-21 16:04:06, 註解 無‧
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
依個人經驗,
加總資料列要寫回資料庫 對日後資料庫的 MAINTAIN 會增加不必要的困難度 (例如, 改天資料變了, 這時就不能新增一筆加總資料列, 而是找到舊的那筆並更新) 若一定要那樣, 建議 1. 資料庫保持明細資料, 2. 用 ROLLUP QUERY 到的資料整個寫到一個新的資料表或是 EXCEL 或 CSV 或 TXT 檔 例如 : 寫到一個新資料表(算是暫存檔, 每次寫前可以先 清檔, 動作比較簡單) INSERT INTO TABLE2 SELECT ..... FROM TABLE1 WHERE .... GROUP BY ... WITH ROLLUP; 3. 您要的表就在 TABLE2
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |