2014-10-01 55 views
0

我打算对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是不同的,因为我认为。

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

谢谢你的时间。

样品日期:

表:

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 

(我试图填补expr3中的代表与运营商,而不是空的名字)

Kinbds

+0

您在表中更新列,联接和聚合的不是结果。 – 2014-10-01 02:27:57

+0

那么,在运行查询之后,如何获得空值,并将其他部分替换为空值? – 2014-10-01 02:34:41

+0

我已经看到了Oracle的这种语法,所以,我想也许有一些SQL的东西 – 2014-10-01 02:35:34

回答

0

您正在讨论Oracle中的相关更新功能。虽然这不是SQL Server的情况。您需要简化它并在特定表格上进行一些更新。

参见:

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

update one table with data from another

+0

感谢您的帮助,但实际上我只有一个表不是两个! – 2014-10-01 02:51:01

+0

我将通过一个逻辑字段分隔记录 – 2014-10-01 02:51:27

+0

这是前进的方式。布拉沃! – Ash 2014-10-01 02:52:16