線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1159
推到 Plurk!
推到 Facebook!

資料表如何交叉查詢產生資料?

尚未結案
RogerHer
一般會員


發表:11
回覆:39
積分:10
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-31 18:41:54 IP:61.221.xxx.xxx 未訂閱
各位大大, 我有大約七個類似下列的資料表要建立, 每個 Table 都有 Low、Med 及 High 的資料,但縱向的欄位則每個 Table 都不同,我想用一個 Table 儲存七個 Table 的 Low、Med及High 欄位的資料(浮點數),而七個 Table 裏面只存一個索引值(整數)來索引到 Low、Med 、及 High 的值,可是問題來了,這樣我應該如何產生報表? 因為報表都是以一筆資料為單位縱向列印,要嘛就是印 Low、Med、High 的值(應該要橫向列印),要嘛就是印其他七個資料表的內的索引值,弄了快二個星期了都弄不出來,不知道有沒有人有好辦法? 這星期如果再弄不出來只好一個個欄位建了....
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-04 16:27:46 IP:61.61.xxx.xxx 未訂閱
不太瞭解你的意思 是已有七個表格, 現在要為每個表格各加三個欄位 (Low,Med,High) 但想改成, 只多建一個表格來存 Low,Med,High. 而用一索引值做為這個表格與那七個表格之間的關聯? 那... SELECT A.HoppingON,B.Low,B.Med,B.High FROM Table1 A, Table8 B WHERE A.Key=B.Key 符合需求嗎? 或者你能更清楚的描述一下呢? 現有的是什麼, 要的報表有些什麼
RogerHer
一般會員


發表:11
回覆:39
積分:10
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-05 15:39:20 IP:211.76.xxx.xxx 未訂閱
首先感謝 Brian77 的回覆,對於問題描述的不夠清楚而損傷各位的腦細胞小弟在此說聲抱歉!  其實這是一個 href="http://student.ncit.edu.tw/~s59232006/BT.zip">http://student.ncit.edu.tw/~s59232006/BT.zip 不過目前因為一直試不出如何讓 QuickReport 產生我需要的結果,所以只好手動將這些資料一個個畫在 TCanvas 上,雖然辛苦了一點,但總比一直秏下去好多了.
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-17 22:33:26 IP:61.221.xxx.xxx 未訂閱
先貼上目前架構時的 SQL
SELECT ID,Hopping,SUM(LowNum) AS Low,SUM(MedNum) AS Med,SUM(MaxNum) AS High
FROM (
 SELECT B.ID,'1Avg' AS Hopping, A.Avg AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'1Avg' AS Hopping, 0 AS LowNum, A.Avg AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'1Avg' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Avg AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 UNION
 SELECT B.ID,'2Max' AS Hopping, A.Max AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'2Max' AS Hopping, 0 AS LowNum, A.Max AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'2Max' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Max AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 UNION
 SELECT B.ID,'3Min' AS Hopping, A.Min AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'3Min' AS Hopping, 0 AS LowNum, A.Min AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'3Min' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Min AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 UNION
 SELECT B.ID,'4Peak' AS Hopping, A.Peak AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'4Peak' AS Hopping, 0 AS LowNum, A.Peak AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'4Peak' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Peak AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 UNION
 SELECT B.ID,'5Tested' AS Hopping, A.Tested AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'5Tested' AS Hopping, 0 AS LowNum, A.Tested AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'5Tested' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Tested AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 UNION
 SELECT B.ID,'6Failed' AS Hopping, A.Failed AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'6Failed' AS Hopping, 0 AS LowNum, A.Failed AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'6Failed' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Failed AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 UNION
 SELECT B.ID,'7Passed' AS Hopping, A.Passed AS LowNum, 0 AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.Hoponl
 UNION
 SELECT B.ID,'7Passed' AS Hopping, 0 AS LowNum, A.Passed AS MedNum, 0 AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponM
 UNION
 SELECT B.ID,'7Passed' AS Hopping, 0 AS LowNum, 0 AS MedNum, A.Passed AS MaxNum FROM OP_Results A, OP_Report B WHERE A.ID=B.HoponH
 ) AS A
GROUP BY ID, Hopping
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-17 22:53:03 IP:61.221.xxx.xxx 未訂閱
考慮另一架構, 如果主題上描述的圖表所列 建一表格, 有 ID,Item,Low,Med,High 等五個欄位 Item 可用字串(AVG,MIN,MAX,...) 或者用數字代碼(1..7)表示 而該項目的 Low,Med,High 值記錄成一筆 那個每組資料中, 就包含了七筆 (Item=1~7), 每筆擁有 Low,Med,High 三項數值 Result(Passed) 原採布林值, 用數字一樣能表達 希望匠能達成你的報表需求
RogerHer
一般會員


發表:11
回覆:39
積分:10
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-18 10:24:59 IP:61.221.xxx.xxx 未訂閱
果然是高手,沒錯! 這一段 SQL 的結果就是我要的,太感謝 Brian77 了! 只不過看起來滿複雜的,我得先消化一下... 另外 Brian77 兄的建議是指將橫、縱軸記錄的資料方式 Change ,這樣就不用下這麼煩的 SQL 是嗎? 我會考慮看看,畢竟改變資料庫結構是一項大工程,而且因為這段 SQL 只解決了七個 Table 中的一個,要在一張報表印七個 Table 的資料是另一個難題,這個我有需要的話會再建另一個主題,再次感謝 Brian77! ^_^
系統時間:2024-06-28 19:17:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!