2014-01-24 15 views
0

我已經要求下面的代碼問題: Here is the question.變化從SQL到SQL-CE - 語法

我有我在我的數據庫查詢(SQL Server)的使用下面的SQL語法。

MERGE INTO table_with_team_and_goals AS target 
USING (SELECT Team, SUM(headergoal + freekickgoal) AS goals FROM table_with_goals GROUP BY team) AS source 
ON target.team=source.team 
WHEN MATCHED THEN 
     UPDATE SET goals = source.goals 
    WHEN NOT MATCHED THEN 
     INSERT (Team, Goals) 
     VALUES (source.team, source.goals); 

我正在改變到sql-server-ce(精簡版)。 我可以發現,SQL Server Compact不支持sql支持的一些命令。 (如marge into)

如何更改代碼,使其可以在SQL Server Compact上運行。

謝謝你的幫助! BK

編輯:

表:table_player_goal_ratings - >包含以下數據:

ID......Team...........Name......HeaderGoal......FreeKickGoal 
104  Barcelona  Mike  2    1 
105  Barcelona  Peter  0    0 
106  Real Madrid Michael 0    2 
107  Real Madrid Terry  0    2 
108  Chelsea  James  0    0 
109  Chelsea  Arthur 1    2 
110  Chelsea  Spence 1    2 

現在我想在下面的表格(table_team_goal_ratings)插入這些數據是這樣:

FC.............Goals 
Barcelona  3 
Real Madrid 4 
Chelsea  6 
+0

(好吧,[你可能不使用'MERGE'無論如何,即使在SQL Server](http://www.mssqltips.com/sqlservertip/3074 /使用 - 謹慎 - 與-SQL服務器合併語句/)。另外,您應該考慮使用SQL Express/LocalDB而不是CE。) –

+0

因此,表table_team_goal_ratings目前是空的,您想知道如何使用這些總計填充它? –

+0

@AaronBertrand:謝謝你的評論。是的,表「table_team_goal_ratings」是空的,我想知道如何用這些總和填充它。 –

回答

5

您可以使用UPDATEINSERT

BEGIN TRANSACTION; 

UPDATE A 
SET goals = B.goals 
FROM dbo.table_with_team_and_goals A 
INNER JOIN (SELECT team, SUM(headergoal + freekickgoal) AS goals 
      FROM table_with_goals 
      GROUP BY team) B 
    ON A.team = B.team 

INSERT INTO dbo.table_with_team_and_goals(team, goals) 
SELECT team, goals 
FROM ( SELECT team, SUM(headergoal + freekickgoal) AS goals 
     FROM table_with_goals 
     GROUP BY team) A 
WHERE NOT EXISTS(SELECT 1 FROM dbo.table_with_team_and_goals 
       WHERE team = A.team) 

COMMIT TRANSACTION; 
+0

非常感謝您的回答。我可以請你解釋一下代碼的作用嗎?謝謝! –

+0

從哪裏得到A和B? –

+0

'A'和'B'是我選擇使用的表別名,可能是真的。這只是爲了簡單 – Lamak