【问题标题】:SQL Query : Update from a select resultSQL 查询:从选择结果更新
【发布时间】:2016-07-03 15:07:08
【问题描述】:

这是我的 sql 查询

UPDATE dbo.TD_TOTAL_ACCOUNTS SET Total_Accounts = Total 
SELECT annee, mois,[Group],
(
 SELECT SUM(Accounts_Number) 
FROM olap.TD_ALL_ACCOUNTS 
WHERE EOMONTH(cast( cast(mois as nvarchar(2))+ '/' + '01'  + '/' + cast(annee as nvarchar(4)) as DATETIME)) <= EOMONTH(cast( cast(T2.mois as nvarchar(2))+ '/' + '01'  + '/' + cast(T2.annee as nvarchar(4)) as DATETIME)) AND [Group] = T2.[Group]
) AS Total 
FROM olap.TD_ALL_ACCOUNTS AS T2

“总计”列无法识别。我无法命名由选择 T3 产生的表并在 SET "Total_Accounts = T3.Total" 中使用它

提前谢谢你。

【问题讨论】:

  • SET DATEFORMAT dmy 你的代码可能会失败/产生错误的结果。我强烈反对这样创建DATE。考虑使用DATEFROMPARTS
  • lad2025 你能解释一下吗?
  • DEMO 请检查如何连接DATE

标签: sql-server select sql-update


【解决方案1】:

这样的事情应该可以解决问题(将 IdColumn 更改为您的行标识符),但我强烈建议您考虑 Lad2025 评论。

UPDATE t 
SET Total_Accounts = Total 
FROM dbo.TD_TOTAL_ACCOUNTS t 
INNER JOIN
(
SELECT IdColumn, annee, mois,[Group],
(
 SELECT SUM(Accounts_Number) 
FROM olap.TD_ALL_ACCOUNTS 
WHERE EOMONTH(cast( cast(mois as nvarchar(2))+ '/' + '01'  + '/' + cast(annee as nvarchar(4)) as DATETIME)) <= EOMONTH(cast( cast(T2.mois as nvarchar(2))+ '/' + '01'  + '/' + cast(T2.annee as nvarchar(4)) as DATETIME)) AND [Group] = T2.[Group]
) AS Total 
FROM olap.TD_ALL_ACCOUNTS AS T2
) T3 ON(t.IdColumn = T3.IdColumn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多