2014-10-01 110 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