2016-10-31 4 views
0

Ich habe ein Datenblatt in Excel und ich möchte einige Informationen erhalten, indem Sie ado Verbindung in Excel VBA verwenden. Ich habe 3 Anfragen geschrieben, um diese Arbeit zu erledigen und werde noch ein paar mehr schreiben. Daten sieht so aus, DataWie diese SQL-Abfragen in Excel zu kombinieren

Lassen Sie mich es ein wenig erklären. Order No ist der Arbeitsauftrag eines Jobs. Resource Id ist eigentlich eine eindeutige Nummer für eine Maschine. Duru Kodu ist der Code erklärt den Grund des Stopps zwischen Bitim Zamani (Endzeit) und Basl Zamani (Startzeit). Qty ist die Produktionsmenge.

Ich zeigte die Daten nur für EM22, aber es gibt natürlich mehr Maschinen.

Stop-Codes sind tatsächlich in zwei unterteilt, die geplant und ungeplant sind. Codes für geplante sind D00 D10 D11. Andere Codes von D01 bis D30 sind ungeplante Stopps.

ich total geplante Stopps, ungeplante Stopps und Menge für eine bestimmte Ressource-ID und gruppiert sie nach Bestell-Nr

Ich konnte nicht kommen mit einer Abfrage mag, die auf einmal all die Dinge tun, aber geteilt es drei . Erster für ungeplante Stopps. Der zweite ist für geplante Stopps und der letzte ist für Menge.

'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]" 

Die wichtigste Frage ist hier, dass, wenn es eine Möglichkeit, diese Abfragen zu kombinieren.
Auch gibt es ein anderes Problem, das unten gezeigt wird. Was es sein soll ist wie im gelben Teil. what it is

Aber Ergebnis ist in dem grauen durch SQL-Abfragen erzeugte Teil tut Spiel, wenn eine Summe auf 0

Antwort

1

gleich Ich denke der folgende Code funktionieren soll.

'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]" 

Hinweis: Der Test für [Duru Kodu] <> '0' muß wie Not IsNull([Duru Kodu]) zu etwas geändert werden (ich glaube, dass die richtige Syntax ist), wenn der Wert, der als 0 in Ihrer Tabelle zeigt nach oben ist eigentlich eine Null.

+0

Ich werde dies versuchen, sobald ich einen Weg finden kann, dies auf Mac zu arbeiten. –

+0

Können Sie die zweite Summenfunktion ändern? Du hast Bedingungen als gleich geschrieben. einer von ihnen sollte D01 bis D30 sein. Du kannst es einfach angeben, das wäre genug. Und das funktioniert. Vielen Dank. :) –

+1

@alisrn - Die zweite Summenfunktion multipliziert mit 1440 in den Fällen, in denen die erste mit Null multipliziert wird und umgekehrt. Je nach Wert von "Duru Kodu" wird also für jeden Datensatz nur eine der beiden Summen addiert. – YowE3K

Verwandte Themen