SQL 如何在遍历列时取出数据?

SQL how to take out data while looping through columns?

我的 SQL 代码还有另一个问题。下面我将通过展示我的 table 之一以及我想如何从中获取信息来告诉您。

1) 公司的所有员工都属于一个部门。在这个table中,例如,员工00010-00013到Dept1和00019-00022到Dept4。

2) 发薪时,table作为员工状态栏"Paid"或"Unpaid"是否已发薪的记录。可以看到,除了00017和00022以外的所有员工都已经拿到了工资。

3) 当属于某个部门的所有员工都已支付时,部门状态应更改为"Paid",表示属于该部门的所有员工都已支付。如您所见,Dept1 的所有员工都已收到工资,部门状态设置为 "Paid"。 Dept4 的所有员工都没有被支付,Department Status 设置为 "Unpaid".

4) 可以看到,在Dept2 的Department Status 中做了一个"error"。尽管所有员工都已支付,但部门状态仍设置为 "Unpaid"。

我需要构建一个代码来显示像 Dept2 这样的所有部门,这些部门的所有员工都已领薪水,但仍未更改其状态。

这可以通过省略所有其他(正确的)部门,或者添加一个新的列来完成,其中注明了这一点,以便我可以在之后进行排序。下面我将添加一些无用的伪代码,通过添加一个新列 INCOR_DEP_STAT 来显示我想要实现的目标,在该列中我可以判断部门状态是否不正确。

SELECT A.DEPART, A.DEPART_STAT, A.EMPLOY, A.EMPLOY_STAT, 'N/A' as INCOR_DEP_STAT
FROM PAYTABLE A

FOR all objects in A.DEPART;
  IF all A.EMPLOY_STAT in A.DEPART == "Paid" AND IF A.DEPART_STAT == "Unpaid"
   THEN INCOR_DEPT_STAT = "Incorrect"

我认为你把这种方式搞得太复杂了。要确定标记为未付薪且员工标记为已付薪的部门:

select
distinct department
from
PayTable
where
depart_stat= 'Unpaid'
and employ_stat= 'Paid'

如果你想导出一个列来显示这个:

select
...,
case when depart_stat= 'Unpaid' and employ_stat = 'Paid' then 'Incorrect'
else 'Correct' end as Incor_Dept_Stat
from
PayTable

编辑: 重新阅读你的问题。如果您只想要部门状态不等于该组中所有员工的员工状态的部门:

select
dept,
dept_status
from
(
select
dept,
dept_status,
count (employee) as Emps,
count (case when Employ_Status <> Dept_Status then 1 else null end) as PaidStatus
from
PayTable
group by 
dept,
dept_status
) t
where
emps = PaidStatus
SELECT
   *
FROM PAYTABLE A
WHERE DEPART NOT IN (
   SELECT
      DEPART 
   FROM PAYTABLE A
   WHERE EMPLOY_STAT='Unpaid'
)
AND DEPART_STAT='Unpaid'

我认为您需要使用以下查询

SELECT DISTINCT A.DEPART_STAT
    , A.EMPLOY
    , A.EMPLOY_STAT
    , 'N/A' as INCOR_DEP_STAT
FROM PAYTABLE A
WHERE 'Paid' = ALL
    (SELECT p1.Status 
     FROM PAYTABLE p1  
     WHERE A.Department = P1.Department)
AND A.Status = 'UnPaid'