如下所示:
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
请注意,缺少“Home 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中移动单元格的过程?
我几周来一直在努力解决这个问题!谢谢!
答案 0 :(得分:6)
你不能 - SQL表不是Excel表 - 它们只是没有那种结构。无论你怎么努力 - 你都无法做那样的事情。这只是根本不同。
SQL Server表有行和列 - 当然 - 但它们没有隐含的顺序或任何东西。你不能“改变”一行 - 本身没有“向上” - 这一切都取决于你的订购。
比将苹果与橙子相比更糟糕 - 这就像比较苹果和花岗岩块 - 它只是不一样 - 不要浪费你的时间试图让它变得一样。
答案 1 :(得分:3)
许多选项之一是使用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
您必须指定排序(名称上的示例订单。)
答案 2 :(得分:0)
如果你有两套,你只想将第二组中的每一组分配给第一组中的项目,“使用它们”,最简单的方法是在两组上使用ROW_NUMBER()并执行左键在第一个到第二个集合的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