我正在处理一个未规范化的数据库,并且由于我没有权限而无法对其进行规范化。问题是
我有两张桌子
- Gl_Account
- 试算表
表的结构就像
Gl_Account(空表或一些旧数据)
loc | gl_acct | HMISTOTAL
-------------------------------
| |
-------------------------------
试算表
loc | g1101 | g1102 | g1103
----------------------------------------
1400 | 20 | 30 | 0
----------------------------------------
1500 | 10 | 0 | 40
----------------------------------------
现在我想做的是
从trialBalance表中获取不在Gl_Account表中的记录,并使用相应的 GL_acct 编号,其中相应gXXXX(在试算表中)下的金额不为零
让我用一个例子来解释它。牢记上表,我想将表 GL_Account 填写为
GL_Account
loc | gl_acct | HMISTOTAL
---------------------------------------
1400 | 1101 | 20
---------------------------------------
1400 | 1102 | 30
---------------------------------------
1500 | 1101 | 10
---------------------------------------
1500 | 1103 | 40
---------------------------------------
我已经尝试过这个查询,但它只有捕获的第一条记录被输入到 gl_accountt 表中。我暂时跳过了金额部分..但它是必需的。
insert into Gl_Account (loc,gl_acct,HMISTOTAL)
select * from (
select a.loc,
CASE
WHEN a.G1101 <> 0 THEN '1101'
WHEN a.G1102 <> 0 THEN '1102'
WHEN a.G1104 <> 0 THEN '1104'
WHEN a.G1151 <> 0 THEN '1151'
END AS gl_Acct
'0' as HMISTOTAL
FROM trialBalance a where NOT EXISTS
(SELECT 1 from GL_Account b WHERE b.loc = a.loc)) ab
提前致谢。