我打算對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