Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql Server如何在另一条记录中存储字段的值_Sql Server - Fatal编程技术网

Sql server Sql Server如何在另一条记录中存储字段的值

Sql server Sql Server如何在另一条记录中存储字段的值,sql-server,Sql Server,我使用UNION从两个数据库中提取数据。我创建了一个名为Ccode的字段来指示记录来自哪个数据库。然后,我使用CASE语句创建另一个名为Elmin的字段,并根据Account字段使用Balance字段(另一个计算字段)填充它。 我想做的是为一条记录(其中Account=1113)获取Elimn字段的值,并将其复制到Account=3104的记录中(我将一家公司的应收账款与另一家公司的应付账款进行抵销),有什么方法可以做到这一点吗 我曾考虑使用一个变量,但我似乎不知道如何将一个计算字段放入一个变量

我使用UNION从两个数据库中提取数据。我创建了一个名为Ccode的字段来指示记录来自哪个数据库。然后,我使用CASE语句创建另一个名为Elmin的字段,并根据Account字段使用Balance字段(另一个计算字段)填充它。 我想做的是为一条记录(其中Account=1113)获取Elimn字段的值,并将其复制到Account=3104的记录中(我将一家公司的应收账款与另一家公司的应付账款进行抵销),有什么方法可以做到这一点吗

我曾考虑使用一个变量,但我似乎不知道如何将一个计算字段放入一个变量中,因为它需要如此复杂的Select语句(使用联接、多个字段和计算)

我不想保存数据!!请不要用Alter table或Insert等回答我。我只想显示结果。 有什么想法吗

电流输出:

Account      AcctName                    Ccode      Balance      Elmin
1112      Accounts Receivable - (U.S.)      C      1250923.94      0
1112      Accounts Receivable (U.S.)        U      0               0
1113      Accounts Receivable - I/C          U      223780.55      223780.55
3104      Accounts Payable - I/C            C      -254000         0
希望:

Account      AcctName                    Ccode      Balance      Elmin
1112      Accounts Receivable - (U.S.)      C      1250923.94      0
1112      Accounts Receivable (U.S.)        U      0               0
1113      Accounts Receivable - I/C          U      223780.55      223780.55
3104      Accounts Payable - I/C            C      -254000        223780.55
SELECT        T1.Account, T2.AcctName, 'U' AS Ccode, SUM(T1.Debit - T1.Credit) AS 'Balance', 

CASE 
    WHEN T1.Account IN (1113) THEN SUM(T1.Debit - T1.Credit) ELSE 0 
END AS Elmin

FROM            OJDT AS T0 INNER JOIN
                         JDT1 AS T1 ON T0.TransId = T1.TransId INNER JOIN
                         OACT AS T2 ON T1.Account = T2.AcctCode
WHERE        (CAST(T0.RefDate AS date) >= @Start_Date) AND (CAST(T0.RefDate AS date) <= @End_Date) AND (T2.GroupMask IN ('1', '2', '3'))
GROUP BY T1.Account, T2.AcctName, T2.GroupMask, T2.FatherNum

union all

SELECT        T1.Account, T2.AcctName, 'C' AS Ccode, SUM(T1.Debit - T1.Credit) AS 'Balance', 

CASE WHEN T1.Account IN (1251) THEN SUM(T1.Debit - T1.Credit) ELSE 0 
END AS Elmin

FROM            CANADACO.dbo.OJDT AS T0 INNER JOIN
                         CANADACO.dbo.JDT1 AS T1 ON T0.TransId = T1.TransId INNER JOIN
                         CANADACO.dbo.OACT AS T2 ON T1.Account = T2.AcctCode
WHERE        (CAST(T0.RefDate AS date) >= @Start_Date) AND (CAST(T0.RefDate AS date) <= @End_Date) AND (T2.GroupMask IN ('1', '2', '3'))
GROUP BY T1.Account, T2.AcctName, T2.GroupMask, T2.FatherNum
ORDER BY T1.Account
代码:

Account      AcctName                    Ccode      Balance      Elmin
1112      Accounts Receivable - (U.S.)      C      1250923.94      0
1112      Accounts Receivable (U.S.)        U      0               0
1113      Accounts Receivable - I/C          U      223780.55      223780.55
3104      Accounts Payable - I/C            C      -254000        223780.55
SELECT        T1.Account, T2.AcctName, 'U' AS Ccode, SUM(T1.Debit - T1.Credit) AS 'Balance', 

CASE 
    WHEN T1.Account IN (1113) THEN SUM(T1.Debit - T1.Credit) ELSE 0 
END AS Elmin

FROM            OJDT AS T0 INNER JOIN
                         JDT1 AS T1 ON T0.TransId = T1.TransId INNER JOIN
                         OACT AS T2 ON T1.Account = T2.AcctCode
WHERE        (CAST(T0.RefDate AS date) >= @Start_Date) AND (CAST(T0.RefDate AS date) <= @End_Date) AND (T2.GroupMask IN ('1', '2', '3'))
GROUP BY T1.Account, T2.AcctName, T2.GroupMask, T2.FatherNum

union all

SELECT        T1.Account, T2.AcctName, 'C' AS Ccode, SUM(T1.Debit - T1.Credit) AS 'Balance', 

CASE WHEN T1.Account IN (1251) THEN SUM(T1.Debit - T1.Credit) ELSE 0 
END AS Elmin

FROM            CANADACO.dbo.OJDT AS T0 INNER JOIN
                         CANADACO.dbo.JDT1 AS T1 ON T0.TransId = T1.TransId INNER JOIN
                         CANADACO.dbo.OACT AS T2 ON T1.Account = T2.AcctCode
WHERE        (CAST(T0.RefDate AS date) >= @Start_Date) AND (CAST(T0.RefDate AS date) <= @End_Date) AND (T2.GroupMask IN ('1', '2', '3'))
GROUP BY T1.Account, T2.AcctName, T2.GroupMask, T2.FatherNum
ORDER BY T1.Account
选择T1.科目,T2.科目名称,“U”作为科目代码,总和(T1.借方-T1.贷方)作为“余额”,
案例
当T1.账户在(1113)中时,则求和(T1.借方-T1.贷方)否则为0
以埃尔明结束
从OJDT到T0内部连接
JDT1作为T0.TransId=T1.TransId内部连接上的T1
OACT作为T1上的T2。帐户=T2.AcctCode

其中(CAST(T0.RefDate AS date)>=@Start_date)和(CAST(T0.RefDate AS date)=@Start_date)和(CAST(T0.RefDate AS date)您可以将这些子查询包装到公共表表达式(CTE)中。这将为您提供单独的结果集,以与
union all
交叉应用相结合

样本数据

简化数据,但
Elmin
仍然可以是计算字段

declare @Database1Table table
(
    Account int,
    Ccode nvarchar(1),
    Elmin money
);
insert into @Database1Table (Account, Ccode, Elmin) values
(1112, 'U', 0.0),
(1113, 'U', 223780.55);

declare @Database2Table table
(
    Account int,
    Ccode nvarchar(1),
    Elmin money
);
insert into @Database2Table (Account, Ccode, Elmin) values
(1112, 'C', 0.0),
(3104, 'C', 0.0);
简化查询,
Elmin
计算为总和:

select d1.Account, d1.Ccode, sum(d1.Elmin) as Elmin
from @Database1Table d1
group by d1.Account, d1.Ccode
    union all
select d2.Account, d2.Ccode, sum(d2.Elmin) as Elmin
from @Database2Table d2
group by d2.Account, d2.Ccode
order by d1.Account;
当前结果:

Account     Ccode Elmin
----------- ----- ---------------------
1112        C     0,00
1112        U     0,00
1113        U     223780,55
3104        C     0,00
解决方案

将子查询移动到两个CTE(
CTE_d1
CTE_d2
)中。使用
交叉应用
获取
Account=3104
行(
case
表达式)的替换值

这使得:

Account     Ccode Elmin
----------- ----- ---------------------
1112        C     0,00
1112        U     0,00
1113        U     223780,55
3104        C     223780,55

我强烈建议一个更好的别名策略。就像你在UNION上面的代码中写了1113一样……3104不能也被显式添加吗?