Băn khoăn khi cố gắng thêm 2 truy vấn con vào truy vấn chính trong oracle

lập trình


Tôi đang cố gắng cập nhật một truy vấn hiện có để bao gồm 2 truy vấn con, mỗi truy vấn con tính một số lượng khác nhau. Truy vấn chính tự chạy tốt và tôi có thể để 2 truy vấn phụ tự chạy, tuy nhiên, khi tôi cố gắng tham gia cùng chúng, tôi gặp lỗi cú pháp “thiếu từ khóa”.

Đây là truy vấn chính của tôi. Nó lấy dữ liệu kiểm tra từ 3 bảng riêng biệt và tóm tắt theo mã số công việc để hiển thị mỗi lần chạy chương trình kiểm tra. Dữ liệu kiểm tra được chia thành các bảng khác nhau dựa trên loại tính năng (lỗ, trục z hoặc góc). Kết quả cho mỗi mã số công việc có thể được tìm thấy chỉ ở 1 trong 3 bảng này hoặc nhiều bảng. Vì lý do này, đó là lý do tại sao có hàm MIN trong truy vấn chính nên tôi kết thúc bằng một mục nhập cho mỗi mã số công việc. Một điều cần lưu ý nữa là mỗi bảng có thể có một hoặc nhiều tính năng thăm dò cùng loại với sự khác biệt ở một vị trí khác.

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

Điều này trả về dữ liệu như:
Thời gian nhập, máy, băng, số bộ phận, trục chính, số công việc
02/01/2024 11:13:50 CH, NC-537, 4479, ABC, LH, 75576
02/01/2024 11:25:50 CH, NC-537, 4479, ABC, RH, 75577

Bây giờ tôi muốn thêm 2 số vào truy vấn để hiển thị cả tổng số tính năng được kiểm tra cho mã số công việc và tổng số tính năng vượt quá giới hạn cho mã số công việc đó. Một cái gì đó như thế này:

Thời gian nhập, máy, băng, số bộ phận, trục chính, số công việc, thất bại, tổng cộng
02/01/2024 11:13:50 CH, NC-537, 4479, ABC, LH, 75576, 0, 4
02/01/2024 11:25:50 CH, NC-537, 4479, ABC, RH, 75577, 2, 4

Dưới đây là các truy vấn phụ cho mỗi truy vấn. Trên một công việc bao gồm các tính năng bị lỗi, tôi nghĩ rằng tôi sẽ cần COALESCE ở đâu đó vì không phải mọi công việc đều có các tính năng bị lỗi nên đôi khi truy vấn con có thể trả về null

Điều này bao gồm số lượng các tính năng bị lỗi:

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

Cái này bao gồm tổng số tính năng:

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

Những gì tôi đã thử:

Đây là những gì tôi đã thử khi gặp lỗi cú pháp “thiếu từ khóa”. Tôi chỉ cố gắng thêm tổng số tính năng trước rồi thực hiện các tính năng bị lỗi nhưng dường như tôi không thể chỉ làm cho tổng số tính năng hoạt động được.

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

Giải pháp 1

Tôi đã hiểu rồi. Đó là một lỗi đánh máy ngu ngốc. Ở dòng thứ 4 từ dưới lên tôi ghi “là TF”, lẽ ra chỉ là “TF”

コメント

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