SQL过程(Sybase Advantage数据库服务器)

SQL过程(Sybase Advantage数据库服务器),sql,sybase,Sql,Sybase,我的表格包含以下数据: EMPCODE PAYCODE AMOUNT ------------------------ 001 A 100 001 B 200 002 A 120 002 C 80 003 B 50 003 D 20 目前表中的所有工资代码都是A、B、C、D 不过,稍后可能会添加其他EMPCODE和其他新的付费代码,如E

我的表格包含以下数据:

EMPCODE  PAYCODE  AMOUNT
------------------------
001      A        100
001      B        200
002      A        120
002      C         80
003      B         50
003      D         20   
目前表中的所有工资代码都是A、B、C、D

不过,稍后可能会添加其他EMPCODE和其他新的付费代码,如E或F

EMPCODE 001有付款代码A和B,他没有付款代码C和D。 EMPCODE 002有付款代码A和C,但没有付款代码B和D。 EMPCODE 003有付款代码B和D,他没有付款代码A和C。 我想创建一个简单的存储过程/SQL,它可以为每个EMPCODE为PAYCODE添加虚拟记录,而这些EMPCODE并不属于EMPCODE

我的预期结果如下:

EMPCODE  PAYCODE  AMOUNT
------------------------
001      A        100
001      B        200
001      C          0
001      D          0
002      A        120
002      B          0
002      C         80
002      D          0
003      A          0
003      B         50
003      C          0
003      D         20  
我可以通过编码来实现,但我需要通过存储过程来实现

是否有任何SQL存储过程可以实现这一点

感谢您的回答。

使用Join获得结果

更新:

1从表中获取不同的EMP代码

(SELECT EMPcode from Test GROUP BY EMPCODE) AS A 
(SELECT Paycode FROM Test GROUP BY PAYCODE) AS B
2从表中获取不同的付款代码

(SELECT EMPcode from Test GROUP BY EMPCODE) AS A 
(SELECT Paycode FROM Test GROUP BY PAYCODE) AS B
3获取每个Empcode的所有PAYCODE值


您可以通过在子查询中使用交叉联接生成empcode和paycode的所有组合来实现这一点,然后将其用作左联接的派生表。要不插入已经存在的行,应使用相关的not exists谓词排除它们。作为存储过程编写,它可能如下所示:

create proc insert_missing_values as 
insert your_table (empcode, paycode, amount)
select distinct codes.empcode, codes.paycode, isnull(your_table.amount, 0) amount 
from (
    select t1.empcode, t2.paycode 
    from your_table t1, your_table t2
    group by t1.empcode, t2.paycode
    ) codes    
left join your_table on 
  codes.empcode = your_table.empcode 
  and 
  codes.paycode = your_table.paycode
where not exists (
    select 1 from your_table 
    where codes.empcode = your_table.empcode and codes.paycode = your_table.paycode
    )

编辑:由于Sybase ASE不支持显式交叉联接,您可以使用非限定隐式联接,其效果与从表a、表B执行相同,表a、表B返回行的笛卡尔乘积。请看下面的解释。

谢谢库马尔,这是工作。但您能否解释一下:选择*从RPTRX组中选择EMPCODE按EMPCODE作为A,从RPTRX组中选择PAYCODE按PAYCODE作为Bhi jpw,谢谢您的回答,但我的数据库引擎Sybase Advantage数据库服务器8.1无法识别交叉JOIN@btan哦,我不知道。实际上,您可以删除交叉连接关键字以达到相同的效果。我更新了我的答案以反映这一点。