如何在Excel中结合这些SQL查询
我在Excel中有一个数据表,我想通过在excel vba中使用ado连接从它获得一些信息。 我已经写了三个查询来完成这项工作,并会写更多。 数据看起来像这样,
让我稍微解释一下。 Order No
是工作的工作顺序。 Resource Id
实际上是一台机器的唯一编号。 Duru Kodu
是代码解释了Bitim Zamani
(结束时间)和Basl Zamani
(开始时间)之间停止的原因。 Qty
是生产数量。
我只显示EM22的数据,但当然有更多的机器。
停止代码实际上分为两个计划和未计划。 计划代码是D00 D10 D11
。 从D01到D30的其他代码是非计划停止。
我想要一个特定资源ID的总计划停止,计划停止和数量,并按订单号将它们分组
我不能提出一个能够一次完成所有事情的查询,但将其分成三份。 第一个获得计划外停止。 第二个是计划停止,最后一个是数量。
'Specified Machine Number(EM22) makine = Sheets("Dashboard").Cells(2, 11).Value 'Unplanned sorgu1 = "select [Resource Id], [Order No], Sum(([Bitim Zamani]-[Basl Zamani])*1440) as Sure" sorgu1 = sorgu1 + " from [Data$] where [Resource Id] = " + "'" + makine + "'" sorgu1 = sorgu1 + " AND " sorgu1 = sorgu1 + "([Duru Kodu] = 'D01' OR [Duru Kodu] = 'D02' OR [Duru Kodu] = 'D03' OR [Duru Kodu] = 'D04' OR [Duru Kodu] = 'D05' OR [Duru Kodu] = 'D06' OR [Duru Kodu] = 'D07' OR [Duru Kodu] = 'D08' OR [Duru Kodu] = 'D09' OR [Duru Kodu] = 'D12' OR [Duru Kodu] = 'D13' OR [Duru Kodu] = 'D14' OR [Duru Kodu] = 'D15' OR [Duru Kodu] = 'D16' OR [Duru Kodu] = 'D17' OR [Duru Kodu] = 'D18' OR [Duru Kodu] = 'D19' OR [Duru Kodu] = 'D20' OR [Duru Kodu] = 'D21' OR [Duru Kodu] = 'D22' OR [Duru Kodu] = 'D23' OR [Duru Kodu] = 'D24' OR [Duru Kodu] = 'D25' OR [Duru Kodu] = 'D26' OR [Duru Kodu] = 'D27' OR [Duru Kodu] = 'D28' OR [Duru Kodu] = 'D29' OR [Duru Kodu] = 'D30')" sorgu1 = sorgu1 + "GROUP BY [Resource Id], [Order No]" 'Planned sorgu2 = "SELECT Sum(([Bitim Zamani]-[Basl Zamani])*1440) as Surem from [Data$] where [Resource Id] = " + "'" + makine + "'" + " AND " sorgu2 = sorgu2 + "([Duru Kodu] = 'D00' OR [Duru Kodu] = 'D10' OR [Duru Kodu] = 'D11') " sorgu2 = sorgu2 + "GROUP BY [Resource Id], [Order No]" 'Quantity sorgu3 = "SELECT Sum([Qty]) as Uretim from [Data$] where [Resource Id] =" + "'" + makine + "'" + " group by [Resource Id],[Order No]"
这里的主要问题是,如果有一种方法来结合这些查询。
另外还有一个问题,如下所示。 它应该是什么,就像在黄色部分。
但是,当sum等于0时,sql查询产生的灰色部分的结果不匹配。
我认为下面的代码应该工作。
'Specified Machine Number(EM22) makine = Sheets("Dashboard").Cells(2, 11).Value sorgu1 = "SELECT [Resource Id], " & _ "[Order No], " & _ "Sum(([Bitim Zamani]-[Basl Zamani])*IIF(([Duru Kodu] = 'D00' OR [Duru Kodu] = 'D10' OR [Duru Kodu] = 'D11'),0,1440)) as Sure " & _ "Sum(([Bitim Zamani]-[Basl Zamani])*IIF(([Duru Kodu] = 'D00' OR [Duru Kodu] = 'D10' OR [Duru Kodu] = 'D11'),1440,0)) as Surem " & _ "FROM [Data$] " & _ "WHERE [Resource Id] = '" & makine & "' AND " & _ " [Duru Kodu] <> '0' " "GROUP BY [Resource Id], [Order No]"
注意:对于[Duru Kodu] <> '0'
可能需要更改为Not IsNull([Duru Kodu])
(我认为这是正确的语法),如果在您的电子表格中显示为0
实际上是空的。