我在Excel中有这样的数据
table Cost_per_period
---------------------
ProjectId
FaseID
Period
Percentage
table cost_per_partner_per_fase
-------------------------------
ProjectID
FaseID
PartnerID
Amount
table partners
--------------
PartnerID
name
这是我想要的输出。
2012 2013 2014 2015
Project fase jan feb ... dec Q1 Q2 Q3 Q4 wholeY wholeY
------------------------------------------------------------------------
A310 1 100k 20k 10k 100k - 10k 10k 1000k 2000k
A310 2 110k - 20k 99k - 40k 50k 5000k 3000k
......
要合并这些数据,我正在考虑做一个像
这样的SQL语句SELECT cp.projectID, cp.faseID
, case when cp.period between '2012/01/01' and '2012/01/31'
THEN sum(cpf.amount)*cp.percentage as jan2012 end
, case when ..... as feb2012 end
, case .......
FROM cost_per_period as cp
INNER JOIN cost_per_partner_per_fase as cpf
on (cp.postjectid = cpf.projectid) and (cp.faseid = cpf.faseid)
GROUP BY cp.Projectid, cp.faseid
ORDER BY cp.ProjectID, cp.FaseID
我可以只使用Excel吗?我正在使用excel 2007
答案 0 :(得分:3)
以下是针对Excel的最简单的查询,可以帮助您入门:
Sub test()
Dim rs As Object
Set rs = CreateObject("ADOR.Recordset")
rs.Open _
"SELECT CompanyName FROM Customers;", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Tempo\db.xls;" & _
"Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
Sheet3.Range("A1").CopyFromRecordset rs
End Sub
答案 1 :(得分:1)
这是从Excel 2007中记录的宏中获取的,对我有用。您可以修改数据源和SQL查询以满足您的需要。
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
, "Data Source=C:\RM.xlsm;" _
, "Jet OLEDB:Engine Type=37"), Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdTable
.CommandText = Array("SELECT * FROM [Sheet1$A1:B30]")
End With
答案 2 :(得分:-1)
如果数据已在Excel中,则无法对其运行SQL查询。您只能对SQL数据库运行那种代码(例如,如果您在Access中有数据开头)。
但是,您可以在VBA中编写等效函数并在Excel中运行它。
我还发现这个插件可以让你对Excel数据执行SQL:http://www.querycell.com/ 但它不是免费的,我不知道它有多好。