我有我在数据库查询(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);
Run Code Online (Sandbox Code Playgroud)
我现在正在改为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
Run Code Online (Sandbox Code Playgroud)
现在我想在下表中插入(table_team_goal_ratings)这些数据,如下所示:
FC.............Goals
Barcelona 3
Real Madrid 4
Chelsea 6
Run Code Online (Sandbox Code Playgroud)
你可以使用UPDATE和INSERT:
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;
Run Code Online (Sandbox Code Playgroud)