如何在Excel

时间:2016-10-31 12:16:47

标签: sql excel excel-vba select subquery vba

我在excel中有一个数据表,我希望通过在excel vba中使用ado连接从中获取一些信息。我写了3个查询来完成这项工作,并会写一些。数据看起来像这样, Data

让我解释一下。 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]"

这里的主要问题是,如果有办法合并这些查询。
另外还有一个问题如下所示。 应该是什么,就像在黄色部分。 what it is

但结果是在sql查询产生的灰色部分中,当一个和等于0时,它不匹配。

1 个答案:

答案 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实际上是一个空的。