sql server-SQLServer一对多匹配问题

问题描述

SQLServer一对多匹配问题

大神们好,小弟请教一个问题:

Create Table #T1(Id int, Name varchar(20), DeptId varchar(20))
Insert into #T1(Id, Name, DeptId)
select Id=1, Name = '张三', DeptId = '001.001.001'
union
select Id=2, Name = '李四', DeptId = '001.001.002'
union
select Id=3, Name = '王五', DeptId = '001.002.002'

Create Table #T2(Id int identity(1, 1), DeptId varchar(20), Amount money)
Insert Into #T2(DeptId, Amount)
select DeptId = '001', Amount = 1000
union
select DeptId = '001.001', Amount = 500

-- 这里如何才能更简便的返回以下结果
/*
Id  Name    DeptId  Amount
1   张三  001.001.001 500.00
2   李四  001.001.002 500.00
3   王五  001.002.002 1000.00
*/
select T1.Id, T1.Name, T1.DeptId, T2.Amount
from #T1 T1
left join #T2 T2 on T1.DeptId like T2.DeptId + '%'

drop table #T1
drop table #T2

解决方案

哎~~~,贴代码


select Id, Name, DeptId, Amount
from (
    select row_number() over( partition by T1.Id order by T2.DeptId desc) as Num,
        T1.Id, T1.Name, T1.DeptId, T2.Amount
    from #T1 T1
    left join #T2 T2 on T1.DeptId like T2.DeptId + '%'
    ) T
where T.Num=1

时间: 2024-11-02 11:42:56

sql server-SQLServer一对多匹配问题的相关文章

server-SQL Server 的一对多关系查询

问题描述 SQL Server 的一对多关系查询 A表和B表是一对多关系,要如何写sql语句实现图中的效果. 解决方案 SQLServer如下 CREATE TABLE A( id int, name varchar(20) ); CREATE TABLE B( bid int, name varchar(20), pid int ); insert into A(id,name) VALUES(1,'张三'); insert into A(id,name) VALUES(2,'李四'); in

SQL Server 2008 (R2) 单机版安装的先决条件

在为客户提供技术支持时,发现安装SQL Server 2008 (R2) 单机版出现的问题很多源于以下几个典型情况,而客户们有所不知,这正是SQL Server 安装所必须的先决条件: 1.       .NET Framework 3.5 SP1 2.       Windows Installer 4.5 3.       Visual Studio 2008 SP1 4.       在控制面板中设置区域和语言 5.       小型企业安装SQL Server 2008 (R2) 标准版

SQL Server安全性专题一:简介

原文:SQL Server安全性专题一:简介 一. 安全威胁与法则 1. 安全定义 2. 安全威胁 3. 安全法则 安全定义: 在SQLServer环境中,安全性可以认为是[数据保护].包括:  数据只能被已授权的用户访问.  数据被安全地存储.  数据要被安全地传输.  数据可恢复 以下是详解: 1. 数据只能被已授权的用户访问: 必须使用一个强身份验证机制去确保数据被安全地访问.从2000开始(以前的没用过),允许SQL登录及Windows认证登录.其中Windows身份验证更为安全

SQL Server常见错误(1)“无法打开用户默认数据库,登录失败” (2)系统密码改变后无法启动SQLServer

server|sqlserver|错误|数据|数据库 无法打开用户默认数据库,登录失败,这也是SQL Server使用者熟悉的问题之一.在使用企业管理器.查询分析器.各类工具和应用软件的时候,只要关系到连接SQL Server数据库的时候,都有可能会碰到此问题,引起此错误发生的原因比较多,下面我们就来详细分析引起此问题的原因以及解决办法. 一.原因登录帐户的默认数据库被删除. 二.解决方法:(一).使用管理员帐户修改此帐户的默认数据库1.打开企业管理器,展开服务器组,然后展开服务器2. 展开"安

SQL Server四种匹配符的含义

四种匹配符的含义 % 代表零个或者多个任意字符 代表一个任意字符 [] 指定范围内的任意单个字符 [^] 不在指定范围内的任意单个字符 带有匹配符的字符串必须使用引号引起来,例如下面的示例: LIKE 'BR%'返回以"BR"开始的任意字符串. LIKE 'Br%'返回以"Br"开始的任意字符中. LIKE '%een'返回以"een"结束的任意字符串. LIKE '%en%'返回包含"en"的任意字符串. liKE 'en'

SQLServer · 最佳实践 · SQL Server优化案例分享

title: SQLServer · 最佳实践 · SQL Server优化案例分享 author: 石沫 前端时间的视频分享,这里有同学文档总结下来: 请参考:https://yq.aliyun.com/articles/60119

sqlserver c++builder-C++Builder连接SQL server数据库

问题描述 C++Builder连接SQL server数据库 如何用C++Builder软件对连接SQLserver数据库,并把编写数据库中表格的脚本信息读取出来出来,求大神指导!

SQLServer · 最佳实践 · 如何将SQL Server 2012降级到2008 R2

title: SQLServer · 最佳实践 · 如何将SQL Server 2012降级到2008 R2 author: 石沫 迁移须知 使用SQLSERVER 2012的特性在SQL 2008 R2不支持,比如新的分页方式 此迁移操作手册适用于MSSQL2012到MSSQL2008R2的迁移 迁移使用微软提供的脚本生成和导入导出工具 需要在本地将MSSQL2012迁移完成,并且应用改造完成测试通过方可上RDS 迁移到MSSQL2008R2 RDS通过备份还原的方式进行 迁移步骤 安装200

sql server 2008-PHPu连接SQLServer问题

问题描述 PHPu连接SQLServer问题 我要实现PHP连接SQLServer,遇到问题,一直连接失败.具体情况如下: 本机:Win2003 SP2,IIS6+fasecgi+PHP5.3,安装有SQLServer 2005. 我想实现用PHP连接其它服务器上的SQLServer 2008. 我已经安装好了Microsoft Drivers for PHP for SQL Server以及Microsoft SQL Server 2008 Native Client(Microsoft SQ