SQL SERVER 连续两个desc 和 Update From 用法

本文介绍了一个使用 SQL 语句更新数据库表中特定字段的例子。该操作通过 CASE WHEN 结构来判断并设置新值,确保了数据更新的灵活性与准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UPDATE MyTable SET lastdate = CASE ISNULL(date,'') WHEN '' THEN lastdate ELSE date END,
                               lasttime = CASE ISNULL(time,'') WHEN '' THEN lasttime ELSE time END
        FROM (SELECT TOP 1 date,time FROM OtherTable ORDER BY date DESC,time DESC) AS A

### SQL Server 中子查询的使用方法与示例 #### 子查询概述 子查询是在另一个 `SELECT`、`INSERT`、`UPDATE` 或 `DELETE` 语句内部执行的查询。这种结构允许更灵活的数据检索方式,尤其是在处理多表关联的情况下[^2]。 #### 使用等于运算符 (`=`) 的子查询 当需要匹配单个值时,可以使用等号运算符。例如,在两个表格之间基于某一字段相等关系获取特定记录: ```sql SELECT column1 FROM table1 WHERE column1 = (SELECT column2 FROM table2 WHERE condition); ``` 此命令会先执行括号内的子查询部分,得到唯一的结果并与外部查询条件对比,从而筛选符合条件的数据行[^1]。 #### IN 运算符的应用场景 如果希望从一组可能的值中挑选,则可采用 `IN` 关键字配合子查询实现这一目标。比如寻找属于某几个分类的商品列表: ```sql SELECT ProductID,ProductName FROM Products WHERE CategoryID IN ( SELECT DISTINCT CategoryID FROM Categories WHERE CategoryName LIKE 'Beverages%' ); ``` 这段代码表示选取那些类别名称以 "Beverages" 开头的产品信息[^4]。 #### ANY/SOME 及 ALL 运算符详解 对于涉及范围判断的操作,如大于最小值小于最大值等情况,可以通过 `ANY`/`SOME` `ALL` 来简化逻辑表达。考虑如下情况——找出价格高于任意一款饮料类产品的商品: ```sql SELECT p.ProductName,p.UnitPrice FROM Products AS p WHERE UnitPrice > ANY( SELECT UnitPrice FROM Products WHERE CategoryID = 1 /*假设 Beverages 类别的 ID 是 1 */ ); ``` 这里利用了 `ANY` 关键词使得只要有一个满足即可成立;而如果是要求全部都超过的话则应该替换为 `ALL`。 #### 实际应用案例展示 为了更好地理解这些概念的实际用途,下面给出一个具体的例子:统计各城市客户订单数量最多的前两名供应商及其供应次数。 ```sql WITH TopSuppliersPerCity AS ( SELECT c.City, s.CompanyName Supplier, COUNT(o.OrderID) OrderCount, RANK() OVER(PARTITION BY c.City ORDER BY COUNT(o.OrderID) DESC) RankNum FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID JOIN [Order Details] od ON o.OrderID = od.OrderID JOIN Products p ON od.ProductID = p.ProductID JOIN Suppliers s ON p.SupplierID = s.SupplierID GROUP BY c.City, s.CompanyName ) SELECT City,Supplier,OrderCount FROM TopSuppliersPerCity tspc WHERE RankNum <= 2; ``` 上述脚本通过窗口函数 `RANK()` 计算了每座城市的顶级供货商排名,并最终限定了只取前两位作为输出结果[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值