【发布时间】:2018-12-01 18:04:55
【问题描述】:
对于 SQL Server 2017,我创建了一个名为 challenger 的表
drop table if exists challenger
create table challenger (O_Ring_Failure char(1),
Launch_temperature float,
Leak_check_pressure char(10))
select * from challenger
insert into challenger values ('N',66,'Low')
insert into challenger values ('N',69,'Low')
insert into challenger values ('N',68,'Low')
insert into challenger values ('N',67,'Low')
insert into challenger values ('N',72,'Low')
insert into challenger values ('N',73,'Low')
insert into challenger values ('N',70,'Low')
insert into challenger values ('N',78,'High')
insert into challenger values ('N',67,'High')
insert into challenger values ('N',67,'High')
insert into challenger values ('N',75,'High')
insert into challenger values ('N',70,'High')
insert into challenger values ('N',81,'High')
insert into challenger values ('N',76,'High')
insert into challenger values ('N',79,'High')
insert into challenger values ('N',75,'High')
insert into challenger values ('N',76,'High')
insert into challenger values ('Y',70,'Low')
insert into challenger values ('Y',57,'High')
insert into challenger values ('Y',63,'High')
insert into challenger values ('Y',70,'High')
insert into challenger values ('Y',53,'High')
insert into challenger values ('Y',58,'High')
我想从 Launch_temperature 列中提取 O_Ring_Failure 以创建另外两个列 Y_temperature 和 N_temperature(即 O_Ring_Failure='Y' 和 'N' 的温度)
我写的内容如下:
alter table challenger add
Y_temperature float,
N_temperature float;
go
with cte1
as
( select Launch_temperature as y_temp from challenger where O_Ring_Failure='Y'),
cte2 as(select Launch_temperature as n_temp from challenger where O_Ring_Failure='N')
insert into challenger
select y_temp, n_temp from cte1, cte2;
go
select * from challenger
我想将此表和两列传递给我已创建的存储过程来计算 Z 分数,因此我不需要在开始时使用这些 NULLS 并为 Y_temperature 或 N_temperature 重复。有没有办法摆脱它们?
存储过程如下:
create procedure usp_bivariate
@tbl varchar(200),
@target_colname varchar(100),
@predictor_colname varchar(100)
as
begin
declare @sql varchar(max)
set @sql='with cte1(mean1,mean2, var1, var2, count1, count2) as ( select avg('+@target_colname+') as mean1, var('+@target_colname
+') as var1,count('+@target_colname+') as count1, avg('+@predictor_colname+') as mean2, var('+@predictor_colname
+') as var2,count('+@predictor_colname+') as count2 from '+@tbl+') select (mean1-mean2)/sqrt(var1/count1+var2/count2) from cte1'
exec(@sql)
end
【问题讨论】:
-
请不要使用旧式连接,您是否在寻找
UNION ALL?你的问题不清楚,预期的结果是什么?你想在这里做什么? -
编辑您的问题并显示您想要的结果。
-
考虑到您添加了新列并且没有运行
UPDATE语句,除了“旧”行之外,您希望发生什么以具有值@ 987654330@对于新列?对于您插入的新行,为什么当“旧”列不属于INSERT语句的一部分时,它们会有一个值? -
@Sami 我想“只是”直言不讳地将内容插入特定列,而不管同一行中的其他值。因为在此之后,我可以将列名和表名输入到我的分析过程中。
标签: sql sql-server tsql insert-into