gpt4 book ai didi

sql - 动态更新创建的临时表?基本?

转载 作者:行者123 更新时间:2023-12-04 04:48:37 26 4
gpt4 key购买 nike

我有 Table-A,其中有“x”行。 (对于这个例子有 8 行)

我通过使用游标创建了列数为“x”的Table-C。 (使其动态化;如果将更多行添加到 Table-A,则会在 Table-C 中创建更多列)

Table-C (x = 1 thru 8)   UserID  1     2     3     4     5     6     7     8

创建Table-C后,根据从网页输入框传回的userID,将行插入Table-C。 (这是动态完成的)

Table-C after inserts:   UserID  1     2     3     4     5     6     7     8     57      null  null  null  null  null  null  null  null     74      null  null  null  null  null  null  null  null  

现在我想执行更新
Table-B 包含列“x-column”将 UserID 与创建的 Table-C

中的列相关联的数据
Table-B:  UserID  x-column  34      2  34      3  57      2  57      3  57      8  74      2  74      4  74      5  74      7  74      8  93      2  93      4  

所以最终结果是用 1 动态更新 Table-C 其中 Table-B.UserID = Table-C.column_heading

Table-C after update should look like this:     UserID  1     2     3     4     5     6     7     8     57      null  1     1     null  null  null  null  1     74      null  1     null  1     1     null  1     1  

我很难弄清楚构建一个 UPDATE 循环的语法来解决这个问题。我需要使用游标吗?

我很确定这不是火箭科学,我还在学习!

最佳答案

在没有看到您的整个过程的情况下,这是我关于如何执行此操作的建议。部分问题是 tablec 的结构,因此要执行此操作,您首先要使用 UNPIVOT 函数逆透视 tablec 并插入到临时表:

select userid,
value,
col
into #temp
from tablec
unpivot
(
value for col in ([1], [2], [3], [4], [5], [6], [7], [8])
) u

其次,使用tableb更新临时表中的数据:

update t
set value = b.cnt
from #temp t
left join
(
select count(x_column) cnt, x_column, userid
from tableb
group by x_column, userid
) b
on t.userid = b.userid
and t.col = b.x_column

最后,使用PIVOT函数将数据转换回你想要的格式:

select *
from
(
select userid, value, col
from #temp
) x
pivot
(
max(value)
for col in ([1], [2], [3], [4], [5], [6], [7], [8])
) p

参见 SQL Fiddle with Demo .

一些建议是查看您是否需要实际创建 tablec,如果不需要,则可以在执行 PIVOT 时创建它,那么数据就是你需要的最终结果。但是,您可以将数据保留为行格式,然后像我一样将其作为列返回。

如果要转换的列数量未知,则可以使用动态 sql 执行。

关于sql - 动态更新创建的临时表?基本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com