如何在SQL中编写Microsoft Excel“移位单元格”function
拿一个简单的表格,如下所示:
Column Headings: || Agent's Name || Time Logged In || Center || Row 1: Andrew || 12:30 PM || Home Base Row 2: Jeff || 7:00 AM || Virtual Base Row 3: Ryan || 6:30 PM || Test Base
现在让我们说一个单元格被删除,所以表格现在看起来像这样:
Column Headings: || Agent's Name || Time Logged In || Center || Row 1: Andrew || 12:30 PM || Row 2: Jeff || 7:00 AM || Virtual Base Row 3: Ryan || 6:30 PM || Test Base
请注意,“家庭基地”丢失。 现在在Excel中,您可以删除单元格,然后移动其余单元,以便完成的产品如下所示:
Column Headings: || Agent's Name || Time Logged In || Center || Row 1: Andrew || 12:30 PM || Virtual Base Row 2: Jeff || 7:00 AM || Test Base Row 3: Ryan || 6:30 PM ||
你可以看到最后一行留下了一个空白的单元格。
我该如何编写这个在SQL中移动单元格的过程?
我一直在这个问题上奋斗了几个星期! 谢谢!
许多select之一是使用outer apply
从下一行获取中心:
declare @t table (name varchar(50), login time, center varchar(50)) insert into @t (name, login, center) select 'Andrew', '12:30 PM', 'Home Base' union all select 'Jeff', '7:00 AM', 'Virtual Base' union all select 'Ryan', '6:30 PM', 'Test Base' update t1 set t1.center = t3.center from @t t1 outer apply ( select top 1 t2.center from @t t2 where t2.name > t1.name order by t2.name ) t3 select * from @t
你必须指定一个命令(例如名字命令)。
你不能 – SQL表格不是Excel工作表 – 他们只是没有那种结构。 不pipe你怎么努力 – 你都无法做到这样的事情。 这只是根本的不同。
SQL Server表具有行和列 – 当然 – 但它们没有隐含的顺序或任何东西。 你不能“排队” – 本身没有“上” – 这一切都取决于你的订单。
这比把苹果和橘子比起来更糟 – 就像把苹果和花岗岩块比较一样 – 不一样 – 不要浪费你的时间去试试。
如果你有两套,而你只是想把第二套中的每套分配给第一套中的一套,“使用它们”,最简单的方法就是在两套套上使用ROW_NUMBER(),然后在套接字上做一个LEFT JOIN ROW_NUMBER()列从第一个到第二个集合,为每一行分配下一个可用的项目:
WITH set1 AS ( SELECT *, ROW_NUMBER() (OVER ORDER BY set1.sortorder /* choice of order by is obviously important */) AS ROWNUM FROM set1 ) ,set2 AS ( SELECT *, ROW_NUMBER() (OVER ORDER BY set2.sortorder /* choice of order by is obviously important */) AS ROWNUM FROM set2 ) SELECT * FROM set1 LEFT JOIN set2 ON set1.keys = set2.keys -- if there are any keys AND set1.ROW_NUM = set2.ROW_NUM