"更新"对查询结果起作用

时间:2014-10-01 02:25:01

标签: sql sql-server sql-server-2008 sql-update qsqlquery

我将在SQL Server 2008中对查询结果执行UPDATE,但似乎UPDATE需要表的名称,这是不可能的。

我打算这样做

UPDATE (SELECT ~)
set x = "1"
where x IS NULL

但我真的遇到问题" VIEW"在SQL Server 2008中执行此代码。

我的表:

CREATE TABLE [dbo].[Table_1]
(
    [id] [int] NOT NULL,
    [rep] [nchar](10) NOT NULL,
    [qty] [int] NOT NULL,
    [sell] [int] NOT NULL,
    [settled] [bit] NULL
) ON [PRIMARY]

我的更新代码和内部选择是:

update (
SELECT rep, Expr1, Expr2, Expr3, Expr4, Expr5
FROM (SELECT     o.rep, o.Expr1, o.Expr2, p.rep AS Expr3, p.Expr1 AS Expr4, p.Expr2 AS Expr5
FROM (SELECT     oo.rep, SUM(oo.qty) AS Expr1, SUM(oo.sell) AS Expr2
FROM          dbo.Table_1 AS oo
WHERE      (oo.settled = 1)
GROUP BY oo.rep) AS o FULL OUTER JOIN
(SELECT     pp.rep, SUM(pp.qty) AS Expr1, SUM(pp.sell) AS Expr2
FROM          dbo.Table_1 AS pp
WHERE      (pp.settled = 0)
GROUP BY pp.rep) AS p ON o.rep = p.rep) AS derivedtbl_1
)

set rep = Expr4
where rep IS NULL

是否有任何机构可以帮助我找到它如何才能对查询结果进行更新?

我已经阅读了许多其他数据库的脚本,但SQL Server 2008与我想的不同。

执行此代码的主要目的是填充" rep"这是在FULL OUTER JOIN之后创建的。如果有任何其他更简单的方法来填充字段而不是更新,我将不胜感激。这是我的想法。

感谢您的时间。

样本日期:

表:

rep    qty   sell     settled
------------------------------
a       10     20      true
b       20     40      true
c       10     20      False
a       11     22      False

结果如下:

rep    Expr1    Expr2    Expr3      Expr4     Expr5
-----------------------------------------------------
a      10        20       a         11          22
b      20        40       null      null        null
null   null      null     c         10          20  

(我试图用名称为operator而不是null填充Expr3的代表)

Kinbds

1 个答案:

答案 0 :(得分:0)

您正在谈论Oracle中的相关更新功能。但是,SQL Server的情况并非如此。您需要简化它并在特定表上进行一些更新。

参考:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=60899

update one table with data from another