Вставить в ту же таблицу без создания дубликатов или NULLS? - PullRequest
0 голосов
/ 01 декабря 2018

Для 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_tempera с помощью O_Ring_Failure, чтобы создать еще два столбца Y_temperam и N_tempera (т.е.температура для этих 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

Все же результаты меня подводят: There are many NULLs in the beginning

enter image description here

Я хочу передать эту таблицу и два столбца хранимой процедуре, которую я создал для вычисления Z-показателя, поэтому я неЭти NULLS нужны в начале и дубликаты для Y_tempera или N_temperars.Есть ли способ избавиться от них?

Хранимая процедура выглядит следующим образом:

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

1 Ответ

0 голосов
/ 01 декабря 2018

Вы хотите, чтобы считал каждой температуры?

select launch_temperature,
       sum(case when O_Ring_Failure = 'N' then 1 else 0 end) as num_notfailures,
       sum(case when O_Ring_Failure = 'Y' then 1 else 0 end) as num_failures
from challenger
group by launch_temperature;

Я не могу придумать ничего более полезного, что каким-либо образом соответствовало бы вашей аналитической цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...