full join 时通过辅助列序号列消除笛卡尔积重复列

如果没有序号列,那么如果领灯表里有3条数据,还灯表里面有2条数据,full join后就是3*2=6条数据

--1、领灯表,每天每班每人允许重复数据
select ID
      ,ROW_NUMBER() over(partition by PersonID,classid,dt_ClassData order by id)  as  getnum
      ,[PersonID]
      ,[ClassID]
      ,[dt_GetTime]
      ,[dt_ClassData]
from   m_LampHistoryDataGet as a
order by  PersonID,dt_GetTime

--2、还灯表,每天每班每人允许重复数据
select ID
      ,ROW_NUMBER() over(partition by PersonID,classid,dt_ClassData order by id)  as  getnum
      ,[PersonID]
      ,[ClassID]
      ,[dt_ReturnTime]
      ,[dt_ClassData]
from   v_LampHistoryDataReturn as a
order by  PersonID,dt_ReturnTime

--3、整合表,要求领灯时间与还灯时间按照顺序一一对应,第一条领灯数据对应第一条还灯数据
SELECT
      laGet.id as GetID
      ,laReturn.ID as ReturnID
      ,coalesce(laGet.getnum,laReturn.returnnum) as num
      ,coalesce(laGet.PersonID,laReturn.PersonID) as PersonID
      ,laGet.[dt_GetTime]
      ,laReturn.dt_ReturnTime
      ,coalesce(laGet.ClassID,laReturn.ClassID) as classid
      ,coalesce(laGet.dt_ClassData,laReturn.dt_ClassData) as dt_ClassData

FROM         dbo.v_LampHistoryDataGet AS laGet
full join dbo.v_LampHistoryDataReturn  laReturn
on  laGet.PersonID=laReturn.PersonID
and laGet.dt_ClassData=laReturn.dt_ClassData
and laGet.ClassID=laReturn.ClassID
and  laGet.getnum= laReturn.returnnum
order by  PersonID,coalesce(dt_GetTime,dt_ReturnTime)
--按照人员,领灯时间排序
END


  

..

时间: 2024-08-27 09:56:20

full join 时通过辅助列序号列消除笛卡尔积重复列的相关文章

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 '#TT' 中的标识列插入显式值。 sql server 临时表

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 '#TT' 中的标识列插入显式值.我是在SqlServer写存储过程中遇到的这个错误,当时就心想:临时表怎么会有主键呢,我也没有设置主键.然后我就和同事一块调试,终于发现了.原因就是我把真实的数据表中id(其实就是主键)取出来放到临时表(#TT)中,一开始是以为把主键的属性取出来了.后来又一起调试,发现不是那么回事,1.原来SqlServer会自动给临时表设置主键,如果你要插入数据的话,还要打开主键,这样你才能插入数据.“当 ID

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值

问题描述:在SQL SERVER 2008中,向数据表中字段插入数据时,会报错,错误如下: 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值. 解决方案: 1 --允许将显式值插入表的标识列中 ON-允许 OFF-不允许 2 set identity_insert OrderList ON--打开3 4 insert into OrderList(id,ordername,createdate) 5 values(4520,'set'

当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'T_Shell' 中的标识列插入显式值。

--允许将显示值插入表的标识列中-ON:允许 OFF:不允许set identity_insert T_shell ONset identity_insert T_Shell OFF 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'T_Shell' 中的标识列插入显式值.

当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'tb_MyInvoices' 中的标识列插入显式值

默认情况下,IDENTITY_INSER就是off 这种情况下,你写insert 语句时,identity栏位,不要写值,系统会自动帮你写入. 举例说明: create table #aa(id int identity(1,1),dt datetime,pay int) go insert into #aa(dt,pay)values('2012-4-12',100) --不能向 id栏位写值,系统会自动写 go insert into #aa(id,dt,pay)values(100,'20

当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。

在创建事务复制时,很多时候不一定使用快照进行初始化,而是使用备份还原初始化.当对有标识列(即identity的自增列)的表进行复制的时候,使用备份还原初始化搭建起来的复制常常就会报错,即:当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值.这个错误是当创建表的时候,有一项’标识规范‘中的’不用于复制‘默认为‘否’,当发布端插入数据时导致,右键表,选择设计选项,如图 当使用备份还原进行初始化,订阅端的这张表该选项也是‘否’,因此就会报错.在不删除此复制的

【leetcode 简单】第四十题 Excel表列序号

给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: "A" 输出: 1 示例 2: 输入: "AB" 输出: 28 示例 3: 输入: "ZY" 输出: 701 class Solution: def titleToNumber(self, s): ""

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)

问题 datafrme提供了强大的JOIN操作,但是在操作的时候,经常发现会碰到重复列的问题.在你不注意的时候,去用相关列做其他操作的时候,就会出现问题! 假如这两个字段同时存在,那么就会报错,如下:org.apache.spark.sql.AnalysisException: Reference 'key2' is ambiguous 实例 1.创建两个df演示实例 val df = sc.parallelize(Array( ("yuwen", "zhangsan&quo

Excel-vlookup(查找值,区域范围,列序号,0)如何固定住列序列号,这样即使区域范围变动也不受影响

突然,发现VLOOKUP的列序列号并不会随着区域范围的改变而自动调节改变,只是傻瓜的一个数,导致V错值.所有,就想实现随表格自动变化的列序号. 方法一:在列序号那里,用函数得出永远想要的那个列在区域范围中的列数:区域范围内的目标列COLUMN值-区域范围首列COLUMN值+1 =VLOOKUP(I2,$B$2:$G$15,COLUMN($G$2)-COLUMN($B$2)+1,0) 方法二: 原文地址:https://www.cnblogs.com/Formulate0303/p/1104544

3. 无重复字符的最长子串 141. 环形链表 171. Excel表列序号 203. 移除链表元素

3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3.示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1.示例 3: 输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "