在mssql中的合并查询中从源中筛选值

时间:2018-12-11 09:11:17

标签: sql sql-server tsql azure-sql-database

当我使用合并查询插入时,我有 tableA Key1 datetime 列,我在源中得到了重复的行。 br />如何在datetime中将查询中的源归档为最大

MERGE tableA AS t
USING (VALUES 
        ('datakeyA1', 'datetime value'), 
        ('datakeyB1', 'datetime value'),
        ('datakeyA1', 'max datetime value')
    ) AS s (Key1, datetime)
        ON s.Key1 = t.Key1
WHEN MATCHED THEN 
    UPDATE 
    SET    Val = s.datetime
WHEN NOT MATCHED THEN 
    INSERT (Key1, datetime)
    VALUES (s.Key1, s.datetime);

运行上面的查询时,我得到:

  

MERGE语句尝试更多地更新或删除同一行   不止一次。

有什么方法可以仅查询这些行(“ datakeyB1 ”,“ 日期时间 ”),(' datakeyA1 ”,“ 最大日期时间值”),而不使用中间表?

预期结果仅插入/更新 datakeyB1 datakeyA1 值。如果两个数据中的日期相同,则仅获得一行。

MERGE tableA AS t
USING (VALUES
        ('datakeyB1', 'datetime value'),
        ('datakeyA1', 'max datetime value')
    ) AS s (Key1, datetime)
        ON s.Key1 = t.Key1
WHEN MATCHED THEN 
    UPDATE 
    SET    Val = s.datetime
WHEN NOT MATCHED THEN 
    INSERT (Key1, datetime)
    VALUES (s.Key1, s.datetime);

1 个答案:

答案 0 :(得分:1)

您可以使用def main(): n = int(input("Enter the number : ")) return factorial(n) values用select语句包装top 1 with ties子句-像这样:

order by row_number...