簡體   English   中英

在vba-excel中的sql查詢中需要幫助

[英]Need help in Sql query in vba-excel

我在excel的父表中有數據,我需要填充子表。

 Parent Sheet P

Name   Gender   Grades   Frequency 
John    Male       A         3
John    Male       B         1
John    Male       C         2
Jay     Male       B         6
Sarah   Female     B         5
Sarah   Female     C         1
Maria   Female     A         4
Maria   Female     D         2

很明顯,所有學生都不會擁有所有類型的成績。 例如,瑪麗亞擁有兩個D級,這是其他學生所沒有的。

Child sheet (Male) M
Name    Grade A   Grade B  Grade C  Grade D 
John       3         1         2       0
Jay        0         6         0       0

Child sheet (Female) F 
Name    Grade A    Grade B  Grade C  Grade D 
Sarah      0        5         1       0
Maria      4        0         0       2

這就是我想要的。 我已經用標題,唯一的名稱和性別制作了表格,所以只需要填寫成績頻率數據即可。 我想使用SQL來做到這一點。 我有兩件事要寫。

'For Male Sheet
rs.open "SELECT [P$].Frequency FROM [P$] WHERE Name like (SELECT [M$].NAME FROM [M$])

M.Cells(3,1).CopyFromRecordset rs

請問這能做嗎? 如果約翰或Grad A,記錄集是否會返回D級值為0,如果Jay,則記錄C返回D級值為0? 請指教。謝謝。

使用數據透視表的示例。 由於Excel具有內置功能,因此我認為SQL在這里過大。

在此處輸入圖片說明

考慮使用關系數據庫而不是平面文件電子表格來查詢可能超過一百萬的條目。 除非使用VBA或外接程序調用,否則Excel自然不具有SQL查詢功能。

如果使用PC,並且使用MS Access(Excel的同級產品),則可以輕松地運行交叉表查詢,該查詢實際上可以聚合和旋轉記錄集:

TRANSFORM Sum(ParentSheet.Frequency) AS SumOfFrequency
SELECT ParentSheet.[Name]
FROM ParentSheet
GROUP BY ParentSheet.[Name]
PIVOT 'Grade ' & ParentSheet.Grades;

並添加一個where子句以按性別划分:

TRANSFORM Sum(ParentSheet.Frequency) AS SumOfFrequency
SELECT ParentSheet.[Name]
FROM ParentSheet
WHERE ParentSheet.Gender = 'Male'
GROUP BY ParentSheet.[Name]
PIVOT 'Grade ' & ParentSheet.Grades;

TRANSFORM Sum(ParentSheet.Frequency) AS SumOfFrequency
SELECT ParentSheet.[Name]
FROM ParentSheet
WHERE ParentSheet.Gender = 'Female'
GROUP BY ParentSheet.[Name]
PIVOT 'Grade ' & ParentSheet.Grades;

如上所示,只需將您的Parent工作表導入到名為ParentSheet的數據庫表中。 您甚至可以將性別特定的查詢以csv,txt,xml的形式導出到您的子表中,或者導出回xlsx。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM