我在excel中有一个数据表,我希望通过在excel vba中使用ado连接从中获取一些信息。我写了3个查询来完成这项工作,并会写一些。数据看起来像这样,
让我解释一下。 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]"
这里的主要问题是,如果有办法合并这些查询。
另外还有一个问题如下所示。
应该是什么,就像在黄色部分。
但结果是在sql查询产生的灰色部分中,当一个和等于0时,它不匹配。
答案 0 :(得分:1)
我认为以下代码应该有用。
'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
实际上是一个空的。