我打算对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
您在表中更新列,联接和聚合的不是结果。 – 2014-10-01 02:27:57
那么,在运行查询之后,如何获得空值,并将其他部分替换为空值? – 2014-10-01 02:34:41
我已经看到了Oracle的这种语法,所以,我想也许有一些SQL的东西 – 2014-10-01 02:35:34