Bingung saat mencoba menambahkan 2 subkueri hitungan ke kueri utama di Oracle

pemrograman


Saya mencoba memperbarui kueri yang ada untuk memasukkan 2 subkueri yang masing-masing menghitung jumlah berbeda. Kueri utama berjalan dengan baik dengan sendirinya dan saya bisa menjalankan 2 subkueri sendiri, namun, ketika saya mencoba menggabungkannya, saya mendapatkan kesalahan sintaksis “kata kunci hilang”.

Inilah pertanyaan utama saya. Dibutuhkan data inspeksi dari 3 tabel terpisah dan merangkumnya berdasarkan nomor pekerjaan untuk ditampilkan setiap kali program inspeksi dijalankan. Data inspeksi dibagi menjadi beberapa tabel berbeda berdasarkan jenis fitur (lubang, sumbu, atau sudut). Hasil untuk setiap nomor pekerjaan dapat ditemukan hanya di 1 dari 3 tabel ini atau beberapa tabel. Karena itu, itulah mengapa ada fungsi MIN di kueri utama sehingga saya mendapatkan satu entri per nomor pekerjaan. Hal lain yang perlu diperhatikan adalah setiap tabel kemudian dapat memiliki satu atau lebih fitur probe dari jenis yang sama dengan perbedaannya berada di lokasi yang berbeda.

SQL

SELECT MIN(t.timeofentry) as timeofentry, t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber 
from (
     SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONHOLE
      WHERE HOLENUMBER = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONZAXIS
      WHERE ZHIT = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONCORNER
      WHERE TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      )t 
      GROUP BY t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber
      ORDER BY timeofentry

Ini mengembalikan data seperti:
Waktu Masuk, Mesin, Pita, Nomor Bagian, Spindel, Nomor Pekerjaan
01/02/2024 23:13:50, NC-537, 4479, ABC, LH, 75576
01/02/2024 23:25:50, NC-537, 4479, ABC, RH, 75577

Sekarang saya ingin menambahkan 2 hitungan ke kueri untuk menunjukkan jumlah total fitur yang diperiksa untuk nomor pekerjaan dan jumlah total fitur yang di luar toleransi untuk nomor pekerjaan tersebut. Sesuatu seperti ini:

Waktu Masuk, Mesin, Pita, Nomor Bagian, Spindel, Nomor Pekerjaan, Gagal, Total
02/01/2024 23:13:50, NC-537, 4479, ABC, LH, 75576, 0, 4
01/02/2024 23:25:50, NC-537, 4479, ABC, RH, 75577, 2, 4

Berikut adalah subkueri untuk masing-masingnya. Pada salah satu yang menyertakan fitur yang gagal, saya pikir saya akan memerlukan COALESCE di suatu tempat karena tidak setiap pekerjaan memiliki fitur yang gagal sehingga subquery terkadang mengembalikan null

Yang ini mencakup sejumlah fitur yang gagal:

SQL

select jobnumber, sum(fails)as TotalFails
from(
select jobnumber, count(*) as fails from probevalidationhole where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' and (xoutoftol = 'Yes' or youtoftol = 'Yes') group by jobnumber
union
select jobnumber, count(*) as fails from probevalidationzaxis where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' and Zoutoftol = 'Yes' group by jobnumber
union
select jobnumber, count(*) as fails from probevalidationcorner where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' and (xoutoftol = 'Yes' or youtoftol = 'Yes') group by jobnumber)
group by jobnumber

Yang ini mencakup jumlah total fitur:

SQL

select jobnumber, sum(features)as TotalFeatures
from(
select jobnumber, count(*) as features from probevalidationhole where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
union
select jobnumber, count(*) as features from probevalidationzaxis where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
union
select jobnumber, count(*) as features from probevalidationcorner where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber)
group by jobnumber

Apa yang saya coba:

Inilah yang saya coba ketika saya mendapat kesalahan sintaksis “kata kunci hilang”. Saya hanya mencoba menambahkan fitur total terlebih dahulu dan kemudian melakukan fitur yang gagal, tetapi sepertinya saya tidak bisa membuat fitur total saja berfungsi.

SQL

SELECT MIN(t.timeofentry) as timeofentry, t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber, TF.totalfeatures
from (
     SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONHOLE
      WHERE HOLENUMBER = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONZAXIS
      WHERE ZHIT = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONCORNER
      WHERE TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      )t
      left join
      (select jobnumber, sum(features)as TotalFeatures
      from(
      select jobnumber, count(*) as features from probevalidationhole where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
      union
      select jobnumber, count(*) as features from probevalidationzaxis where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
      union
      select jobnumber, count(*) as features from probevalidationcorner where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber)
      group by jobnumber) as TF
      on t.jobnumber = TF.jobnumber
      GROUP BY t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber, tf.totalfeatures
      ORDER BY timeofentry

Solusi 1

Saya menemukan jawabannya. Itu salah ketik yang bodoh. Pada baris ke 4 dari bawah saya punya “as TF”, seharusnya hanya “TF”

コメント

タイトルとURLをコピーしました