从SQL更改为SQL-CE - 语法

Bk_*_*Bk_ 0 sql sql-server-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);
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)

Lam*_*mak 5

你可以使用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)

  • @Bk_看起来这个查询正在做什么,除了你改变了表名 (3认同)