我正在处理一个未规范化的数据库,由于我没有权限,因此无法规范化.问题是
我有两张桌子
表的结构就像
Gl_Account(空表或一些旧数据)
loc | gl_acct | HMISTOTAL
-------------------------------
| |
-------------------------------
Run Code Online (Sandbox Code Playgroud)
试算平衡
loc | g1101 | g1102 | g1103
----------------------------------------
1400 | 20 | 30 | 0
----------------------------------------
1500 | 10 | 0 | 40
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
现在我想做的是
取不在记录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
---------------------------------------
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个查询,但只有捕获的第一个记录被输入到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
Run Code Online (Sandbox Code Playgroud)
提前致谢.
如果您在TrialBalance中的记录有限且记录不超过100万,最简单的方法是使用如下所示的union,但您也可以将其写为循环,我不知道哪个更有效率
Select loc,HMISTOTAL,gl_acct from(
SELECT [Trial Balance].loc, [Trial Balance].g1101 AS HMISTOTAL, '1101' AS gl_acct
FROM [Trial Balance] LEFT OUTER JOIN
[Gl_Account] ON [Trial Balance].g1101 = [Gl_Account].gl_acct AND [Trial Balance].loc = [Gl_Account].loc
Union
SELECT [Trial Balance].loc, [Trial Balance].g1102 AS HMISTOTAL, '1102' AS gl_acct
FROM [Trial Balance] LEFT OUTER JOIN
[Gl_Account] ON [Trial Balance].g1101 = [Gl_Account].gl_acct AND [Trial Balance].loc = [Gl_Account].loc
Union
SELECT [Trial Balance].loc, [Trial Balance].g1103 AS HMISTOTAL, '1103' AS gl_acct
FROM [Trial Balance] LEFT OUTER JOIN
[Gl_Account] ON [Trial Balance].g1101 = [Gl_Account].gl_acct AND [Trial Balance].loc = [Gl_Account].loc) x
where HMISTOTAL >0
Order By loc,HMISTOTAL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
853 次 |
最近记录: |