我是否可以使用SQL语句从工作表A +工作表B中提取数据,并仅使用Excel在工作表C中转储

时间:2011-05-26 14:25:51

标签: sql excel-vba excel-2007 vba excel

我在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

3 个答案:

答案 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/ 但它不是免费的,我不知道它有多好。