【问题标题】:How to combine these sql queries in Excel如何在 Excel 中组合这些 sql 查询
【发布时间】:2017-03-13 12:38:50
【问题描述】:

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

这里的主要问题是,是否有办法组合这些查询。
还有一个问题如下所示。 它应该是黄色部分的样子。

但是结果是在总和等于0时sql查询产生的灰色部分不匹配。

【问题讨论】:

    标签: sql excel select subquery vba


    【解决方案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] &lt;&gt; '0' 的测试可能需要更改为 Not IsNull([Duru Kodu])(我认为这是正确的语法),如果在电子表格中显示为 0 的值实际上是空值。

    【讨论】:

    • 我会尽快尝试在 mac 上解决这个问题。
    • 你能改变第二个求和函数吗?你写的条件是平等的。其中之一应该是 D01 到 D30。你可以指出来,这就足够了。这是有效的。谢谢。 :)
    • @alisrn - 在第一个求和函数乘以 0 的情况下,第二个求和函数乘以 1440,反之亦然。因此,根据 Duru Kodu 的值,每条记录只会添加两个总和中的一个。
    • @alisrn - Ahhh - 我刚刚注意到在某些情况下您不想将值聚合到两个总和中的任何一个中,即当Duru Kodu 等于0 时。我将编辑答案并向where 子句添加条件以防止它们被选中。
    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2020-07-08
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多