从嵌套SELECT查询中提取数据时使用两个WHERE条件

时间:2017-06-07 18:25:25

标签: sql sql-server sql-server-2008

我目前陷入了一个相对简单的SQL查询。

Working_schedule表是

Work_ID   Work_grade   Work_shift       Work_Process    pay_grade
-----------------------------------------------------------------
1         senior       day              manual          1
2         mid          day              auto            5
3         mid          day              auto            2
4         junior       night            manual          1

查询:

SELECT COUNT(Work_shift)
FROM Working_schedule 
WHERE Work_shift = 'night'
  AND Work_grade = 'senior'
(SELECT Work_id
FROM Working_schedule ws
INNER JOIN Area_branch ab
  ON ab.Area_Branch_ID = ws.FK_Area_Branch_ID
INNER JOIN regional_branch rb
  ON rb.regional_branch_id = ab.FK_regional_branch_id
INNER JOIN Country c
  ON.c.country_location = rb.FK_country_location
WHERE c.Company_origin = 'Spain') 

我必须计算有多少夜班工人,他们也是西班牙裔公司的老年人。

目前,我可以过滤所有晚年工作人员,但我不确定如何检查他们是否适用于西班牙裔公司。

我还可以为所有西班牙语公司获取过滤器,并(通过一系列内部联接)找出work_ids日程表中的Working

我的问题是我如何连接两个查询(甚至可以)?如果没有,我该如何解决这个问题?我曾尝试使用INTERSECT,UNION和UNION ALL,但没有任何效果。

预计的输出数字是一个数字 - work_shifts在夜间也是work_grade年级。

4 个答案:

答案 0 :(得分:1)

您的查询中的一个小调整就足够了。

SELECT count(ws.Work_id) FROM Working_schedule ws INNERJOIN Area_branch ab ON ab.Area_Branch_ID = ws.FK_Area_Branch_ID INNERJOIN regional_branch rb ON rb.regional_branch_id = ab.FK_regional_branch_id INNERJOIN Country c ON.c.country_location = rb.FK_country_location WHERE c.Company_origin = 'Spain' and ws.work_shift='night' and ws.work_grade='senior'

答案 1 :(得分:1)

import tkinter as tk
import tkinter.ttk as ttk

class GUI(tk.Tk):

    def __init__(self):

        super().__init__()
        Button_v1()
        Button_v2()


class Button_v1(ttk.Button):

    def __init__(self, default_text="Test"):

        super().__init__(text=default_text)

        s = ttk.Style()
        s.theme_use('clam')
        s.configure(self.winfo_class(), foreground='blue')
        self.pack()


class Button_v2(ttk.Button):

    def __init__(self, default_text="Test2"):

        super().__init__(text=default_text)

        s2 = ttk.Style()
        s2.theme_use('vista')
        s2.configure(self.winfo_class(), foreground='red')
        self.pack()


GUI().mainloop()

此方法使用内部联接筛选出除company_origin ='Spain'之外的所有数据

答案 2 :(得分:0)

试试这个:

SELECT COUNT(Work_shift)
FROM Working_schedule 
WHERE Work_shift = 'night'
AND Work_grade = 'senior'
AND Work_id in 
(SELECT Work_id
FROM Working_schedule ws
INNER JOIN Area_branch ab
  ON ab.Area_Branch_ID = ws.FK_Area_Branch_ID
INNER JOIN regional_branch rb
  ON rb.regional_branch_id = ab.FK_regional_branch_id
INNER JOIN Country c
  ON.c.country_location = rb.FK_country_location
WHERE c.Company_origin = 'Spain')

答案 3 :(得分:0)

我认为您正在寻找的运营商是IN:

SELECT COUNT(Work_shift)  
FROM Working_schedule   
WHERE Work_shift = 'night'  
AND Work_grade = 'senior'  
AND Work_id in 
(SELECT Work_id  
FROM Working_schedule ws  
INNERJOIN Area_branch ab  
  ON ab.Area_Branch_ID = ws.FK_Area_Branch_ID  
INNERJOIN regional_branch rb  
  ON rb.regional_branch_id = ab.FK_regional_branch_id  
INNERJOIN Country c  
  ON.c.country_location = rb.FK_country_location  
WHERE c.Company_origin = 'Spain')