VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

請較高手如何把四個表裝成一個表
前往頁面 上一頁  1, 2
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
asd89839032



註冊時間: 2012-10-15
文章: 49


第 16 樓

發表發表於: 星期三 八月 13, 2014 12:18 pm    文章主題: 引言回覆

.....試看看
&cAlias

_________________
菜鳥路過...
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1642


第 17 樓

發表發表於: 星期三 八月 13, 2014 12:22 pm    文章主題: 引言回覆

沙攏嘸!
明明一行可以搞定的
何苦硬要弄那麼複雜?
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
oldbb



註冊時間: 2007-02-28
文章: 83


第 18 樓

發表發表於: 星期三 八月 13, 2014 2:33 pm    文章主題: 引言回覆

sthuang66 寫到:
-----------------------------------------
CREATE CURSOR 表0 (公司 C(10), 橘子 I, 蘋果 I, 荔枝 I, 芭樂 I)
INDEX ON 公司 TAG 公司

FOR i = 1 TO 4
cAlias = "表" + TRANSFORM(i)
SELECT (cAlias)
cField = FIELD(2)
SET RELATION TO 公司 INTO 表0
SCAN
IF !FOUND("表0")
APPEND BLANK IN "表0"
REPLACE 表0.公司 WITH EVALUATE(cAlias + ".公司") IN "表0"
ENDIF
REPLACE ("表0." + cField) WITH EVALUATE("表0." + cField + " + " + cAlias + "." + cField) IN "表0"
ENDSCAN
SET RELATION TO
ENDFOR

SELECT 表0
BROWSE
---------------------------------------------------------
這個方法不是SQL寫法我功力較低!!無法修正
我有把他轉成PRG直接執行 結果卡在
"SELECT (cAlias)" 這一行
錯誤訊息是 ailas '表1' is not found
但是我明明prg和表1,表2,表3,表4都在同一目錄
請高手指正!!!謝謝


USE 表1 ALIAS 表1 IN 0
USE 表2 ALIAS 表2 IN 0
USE 表3 ALIAS 表3 IN 0
USE 表4 ALIAS 表4 IN 0
回頂端
檢視會員個人資料 發送私人訊息
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 19 樓

發表發表於: 星期三 八月 13, 2014 3:48 pm    文章主題: 引言回覆

ckp6250 寫到:
沙攏嘸!
明明一行可以搞定的
何苦硬要弄那麼複雜?


每人的功力是不同的,一行代搞定的代,蹛初水平的朋友,只能使他詎越糊涂,并不能真正提高他葎水平。

主所提看,只是一初者,引他噎FP的基方面解。
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 20 樓

發表發表於: 星期三 八月 13, 2014 4:39 pm    文章主題: 引言回覆

樓上的PO文 漏字很多. XD


實無定法可言,
故稱 "會寫 VFP 程式者,即非會VFP,是名會VFP."

會的人有八萬四千種寫法,
但對求答案的人只能依其根性,選擇其一告訴他.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 21 樓

發表發表於: 星期三 八月 13, 2014 5:35 pm    文章主題: 引言回覆

Create Cursor T1 (公司 C(1),橘子 N(2))
Insert Into T1 Values ("A",5)
Insert Into T1 Values ("B",3)
Create Cursor T2 (公司 C(1),蘋果 N(2))
Insert Into T2 Values ("B",3)
Insert Into T2 Values ("C",2)
Create Cursor T3 (公司 C(1),荔枝 N(2))
Insert Into T3 Values ("A",3)
Insert Into T3 Values ("B",5)
Create Cursor T4 (公司 C(1),芭樂 N(2))
Insert Into T4 Values ("A",5)
Insert Into T4 Values ("C",3)

* 找出各表中的水果品种
Create Cursor Tpz (品种 C(10)) && 保存水果品种
For lnI=1 To 4
Select ("T"+Transform(lnI))
Insert Into Tpz Values (Field(2,"T"+Transform(lnI)))
EndFor

* 建表葾
Local Aname[2]
Aname[1]="品种"
Aname[2]="公司"
Select Tpz
cStr=""
Scan
cStr=cStr+Alltrim(&Aname[1])+" N(2)"+Iif(Recno()<Reccount(),",","")
Endscan

Create Cursor Thz (&Aname[2] C(10),&cStr)
For lnI=1 To 4
cAlias="T"+Transform(lnI)
Select (cAlias)
Scan
cGs=Evaluate(cAlias+"."+Aname[2])
cPz=Field(2,cAlias)
nPz=Evaluate(cPz)
Select 公司 From Thz Where Evaluate(Aname[2])==cGs Into Cursor Temp
If _Tally=0
Insert Into Thz (&Aname[2]) Values (cGs)
EndIf
Replace (cPz) With nPz For Alltrim(Evaluate(Field(1)))==Alltrim(cGs) And cPz==Field(2,cAlias) In Thz
EndScan
EndFor
Select Thz
Browse
回頂端
檢視會員個人資料 發送私人訊息
asd89839032



註冊時間: 2012-10-15
文章: 49


第 22 樓

發表發表於: 星期四 八月 14, 2014 11:14 am    文章主題: 引言回覆

落落長PART3.....
大量的公司應該會比較方便,只要改表名就可以
如果更大量可以使用 Adir('*.DBF') 把表的名子抓出來
就可以不用改程式了.....

USE T1 AGAIN IN 0 ALIAS T1
USE T2 AGAIN IN 0 ALIAS T2
USE T3 AGAIN IN 0 ALIAS T3
USE T4 AGAIN IN 0 ALIAS T4
SELECT * FROM T1 INTO TABLE TALL


FOR i = 2 TO 4
alis = 'T'+ALLTRIM(STR(i))
SELECT &alis
AFIELDS(fieldname)

SELECT TALL
fieldstr = fieldname(2,1) + ' ' + fieldname(2,2) + '(' + ALLTRIM(STR(fieldname(2,3))) + ')'
IF not(AFIELDS(TALLfieldname) >= i+1 AND fieldname(2,1) = TALLfieldname(i+1,1))
ALTER TABLE TALL ADD &fieldstr
ENDIF
SELECT &alis
lcstore = alis + '.公司'
lcfruit = alis + '.' + fieldname(2,1)
SCAN
SELECT TALL
LOCATE FOR 公司 = &lcstore
IF FOUND()
REPLACE &fieldname(2,1) WITH &lcfruit
ELSE
APPEND BLANK
replace 公司 WITH &lcstore
REPLACE &fieldname(2,1) WITH &lcfruit
ENDIF
SELECT &alis
ENDSCAN
ENDFOR

_________________
菜鳥路過...
回頂端
檢視會員個人資料 發送私人訊息
sthuang66



註冊時間: 2014-04-27
文章: 166


第 23 樓

發表發表於: 星期六 八月 23, 2014 10:45 pm    文章主題: 引言回覆

請教 lygcw9603 高手

你用
Select 公司 From 表1 Union Select 公司 From 表2 Union Select 公司 From 表3 Union Select 公司 From 表4 Into CURSOR Ks
Select A.公司,Nvl(橘子,0) 橘子,Nvl(蘋果,0) 蘋果,Nvl(荔枝,0) 荔枝,Nvl(芭樂,0) 芭樂 FROM Ks A Left Join 表1 B On A.公司==B.公司 Left Join 表2 C On A.公司==C.公司 Left Join 表3 D On A.公司==D.公司 Left Join 表4 E On A.公司==E.公司 INTO TABLE TEMP
如何將,Nvl(橘子,0) 橘子新增的欄位 定義是Numeric而且是位數可以指定??

我現在利用你的方法時表1公司 c(10) 橘子 N(10),表2 公司c(10) 蘋果 N(10),表3公司 c(10) 荔枝 N(10),表4 公司 c(10) 芭樂 N(10) 利用prg變成temp檔時 橘子和蘋果由表1表2來的數據自動變成N(1)而已!!!只剩一個位數! 所以原來是兩位數以上的數值裝起來後都變成"*"星號
麻煩指教 謝謝
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 24 樓

發表發表於: 星期日 八月 24, 2014 6:27 am    文章主題: 引言回覆

數值及字串長度由第一個表決定.
所以要UNION時也要跟著改長度.

但用 APPEND 這個舊時代的方式不會有這個問題.

SQL 方式看起來很短很簡潔,
但其實隱藏很多眉角.
整個展開就不一定很短很簡潔.




佛門有云: 信,解,行,證.
用在學習上也通,
有人提醒你可以用某某方法作,
除了你要相信不會騙你外,
還得完整的了解他所提示的方法之後,再去實踐,
這樣才能真正解答你的問題.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙


syntech 在 星期日 八月 24, 2014 8:26 am 作了第 2 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 25 樓

發表發表於: 星期日 八月 24, 2014 8:09 am    文章主題: 引言回覆

sthuang66 寫到:
請教 lygcw9603 高手

你用
Select 公司 From 表1 Union Select 公司 From 表2 Union Select 公司 From 表3 Union Select 公司 From 表4 Into CURSOR Ks
Select A.公司,Nvl(橘子,0) 橘子,Nvl(蘋果,0) 蘋果,Nvl(荔枝,0) 荔枝,Nvl(芭樂,0) 芭樂 FROM Ks A Left Join 表1 B On A.公司==B.公司 Left Join 表2 C On A.公司==C.公司 Left Join 表3 D On A.公司==D.公司 Left Join 表4 E On A.公司==E.公司 INTO TABLE TEMP
如何將,Nvl(橘子,0) 橘子新增的欄位 定義是Numeric而且是位數可以指定??

我現在利用你的方法時表1公司 c(10) 橘子 N(10),表2 公司c(10) 蘋果 N(10),表3公司 c(10) 荔枝 N(10),表4 公司 c(10) 芭樂 N(10) 利用prg變成temp檔時 橘子和蘋果由表1表2來的數據自動變成N(1)而已!!!只剩一個位數! 所以原來是兩位數以上的數值裝起來後都變成"*"星號
麻煩指教 謝謝

可以用CAST()定义宽度及类型
回頂端
檢視會員個人資料 發送私人訊息
sthuang66



註冊時間: 2014-04-27
文章: 166


第 26 樓

發表發表於: 星期日 八月 24, 2014 9:25 am    文章主題: 引言回覆

謝謝lygcw9603指教
我用CAST() 的確解決了
回頂端
檢視會員個人資料 發送私人訊息
sthuang66



註冊時間: 2014-04-27
文章: 166


第 27 樓

發表發表於: 星期日 八月 24, 2014 9:27 am    文章主題: 引言回覆

To syntech

正如你說的Append不會有問題
一開始就定義好欄位型態字數不會出問題
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 28 樓

發表發表於: 星期一 八月 25, 2014 1:05 am    文章主題: 引言回覆

要真正了解 SQL 命令在VFP實作的原理,
由舊寫法轉換為SQL寫法才會不容易出錯.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 29 樓

發表發表於: 星期二 十一月 07, 2017 12:42 pm    文章主題: 引言回覆

代碼:

Create Cursor T1 (公司 C(1),橘子 N(8))
Insert Into T1 Values ("A",5)
Insert Into T1 Values ("B",3)
Create Cursor T2 (公司 C(1),蘋果 N(8))
Insert Into T2 Values ("B",3)
Insert Into T2 Values ("C",2)
Create Cursor T3 (公司 C(1),荔枝 N(8))
Insert Into T3 Values ("A",3)
Insert Into T3 Values ("B",5)
Create Cursor T4 (公司 C(1),芭樂 N(8))
Insert Into T4 Values ("A",5)
Insert Into T4 Values ("C",3)

Create Cursor Tj (公司 C(1))
For i=1 To 4
    cAlias="T"+Transform(i)
    Select (cAlias)
    For ii=2 To Afields(azd)
        If Type("Tj."+azd[ii,1])=="U"
            cField=azd[ii,1]+" "+azd[ii,2]+"("+Transform(azd[ii,3])+","+Transform(azd[ii,4])+")"
            Alter Table Tj Add &cField
        EndIf
    EndFor
    Select Tj
    Index On 公司 Tag px
    Select (cAlias)
    Set Relation To 公司 Into Tj
    Scan
        cMc=Evaluate(field(1,calias))
        If Not Found("Tj")
            Insert Into Tj (公司) Values (cMc)
        EndIf
        For ii=2 To Fcount(cAlias)
            nValue=Evaluate(field(2,calias))
            Replace (Field(ii,cAlias)) With Evaluate("Tj."+Field(ii,cAlias))+nValue In Tj
        EndFor
    EndScan
EndFor
Select Tj
browse
回頂端
檢視會員個人資料 發送私人訊息
goodnight



註冊時間: 2008-10-13
文章: 472
來自: 台南市

第 30 樓

發表發表於: 星期一 十一月 27, 2017 5:03 pm    文章主題: 引言回覆

有偷雞法
1.轉成 excel 做樞紐表
2.在 sql 2008 server , 可以直接轉置

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 上一頁  1, 2
2頁(共2頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作