zoukankan      html  css  js  c++  java
  • mssql 常用SQL语句或函数

    OrderDate 的顺序计算 SalesOrderHeader 表中所有行的行号,并只返回行 50 到 60(含)。

    WITH OrderedOrders AS
    (
        SELECT SalesOrderID, OrderDate,
        ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
        FROM Sales.SalesOrderHeader 
    ) 
    SELECT SalesOrderID, OrderDate, RowNumber  
    FROM OrderedOrders 
    WHERE RowNumber BETWEEN 50 AND 60;
    

    将 ROW_NUMBER () 与 PARTITION 一起使用

    以下示例使用 PARTITION BY 参数按列 TerritoryName 对结果集进行分区。 OVER 子句中指定的 ORDER BY 子句按列 SalesYTD 对每个分区中的行进行排序。 SELECT 语句中的 ORDER BY 按 TerritoryName 子句对整个查询结果集进行排序。


    USE AdventureWorks2012; GO SELECT FirstName, LastName, TerritoryName, ROUND(SalesYTD,2,1), ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS Row FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY TerritoryName;

     MERGE 

        MERGE Production.UnitMeasure AS target
        USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
        ON (target.UnitMeasureCode = source.UnitMeasureCode)
        WHEN MATCHED THEN 
            UPDATE SET Name = source.Name
    WHEN NOT MATCHED THEN
        INSERT (UnitMeasureCode, Name)
        VALUES (source.UnitMeasureCode, source.Name)
        OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;

    借助派生的源表,使用 MERGE 对目标表执行 UPDATE 和 INSERT 操作

    下面的示例使用 MERGE 以更新或插入行的方式来修改 AdventureWorks2012 数据库中的 SalesReason 表。 当源表中的 NewName 值与目标表 (SalesReason) 的 Name 列中的值匹配时,就会更新此目标表中的 ReasonType 列。 NewName 的值不匹配时,就会将源行插入到目标表中。 此源表是一个派生表,它使用 Transact-SQL 表值构造函数指定源表的多个行。 有关在派生表中使用表值构造函数的详细信息,请参阅表值构造函数 (Transact-SQL)该示例还说明了如何在表变量中存储 OUTPUT 子句的结果,并且说明存储结果之后如何通过执行返回已插入和更新的行的计数的简单选择操作来汇总 MERGE 语句的结果。

     
    -- Create a temporary table variable to hold the output actions.
    DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));
    
    MERGE INTO Sales.SalesReason AS Target
    USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
           AS Source (NewName, NewReasonType)
    ON Target.Name = Source.NewName
    WHEN MATCHED THEN
    UPDATE SET ReasonType = Source.NewReasonType
    WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)
    OUTPUT $action INTO @SummaryOfChanges;
    
    -- Query the results of the table variable.
    SELECT Change, COUNT(*) AS CountPerChange
    FROM @SummaryOfChanges
    GROUP BY Change;
    
  • 相关阅读:
    洛谷 P1991 无线通讯网/一本通OJ 1487【例 2】北极通讯网络
    [NOIP2016TG] 洛谷 P1850 换教室
    洛谷 P1169 [ZJOI2007]棋盘制作
    C#中数组、ArrayList和List三者的区别
    【转载】C#读写注册表
    UninstallTool(Windows软件卸载工具)--快捷、方便卸载电脑中的软件
    C#启动一个外部程序-CreateProcess
    C# 调用外部程序Process类
    学习C#,每天一话
    C#中字符串处理(随时更新)
  • 原文地址:https://www.cnblogs.com/shouwu/p/3897097.html
Copyright © 2011-2022 走看看