Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как посчитать общую длину?  [new]
katish444
Member

Откуда:
Сообщений: 261
Ребят, подскажите пожалуйста, как подсчитать общую длинну пробуренных метров, неважно по какой скважине.

Есть такая таблица
declare  @assay  table (sampleid varchar(255),projectcode varchar(255),  loaddate varchar(255), sampfrom float, sampto float,[value3] float)
insert into @assay  (sampleid,projectcode, loaddate, sampfrom, [sampto],[value3]) values ('UZ-001', 'uz','2017-02-10 17:57:55.707', 5, 10,22)
insert into @assay  (sampleid, projectcode,loaddate, sampfrom, [sampto],[value3]) values ('UZ-001', 'uz','2017-02-17 17:57:55.707', 10, 22,32)
insert into @assay  (sampleid,projectcode, loaddate, sampfrom, [sampto],[value3]) values ('UZ-001','uz', '2017-02-17 17:57:55.707', 50, 52,32)
insert into @assay  (sampleid,projectcode, loaddate, sampfrom, [sampto],[value3]) values ('uz-002', 'uz','2017-02-17 17:57:55.707', 0, 40,100)
insert into @assay  (sampleid, projectcode,loaddate, sampfrom, [sampto],[value3]) values ('uz-002','uz', '2017-02-17 17:57:55.707', 50, 80,100)
select * from @assay where cast([LOADDATE] as date) between '13-feb-2017' and '20-oct-2017'


Мне нужно получить
UZ и 122(Общая длина)
То есть если было бы длина по скважине, то все просто. Ту минус фром, но тут ведь потом эти все длины надо сложить и я совсем не знаю как быть....

То есть сначала
(max(sampto)-min(SAMPFROM))
, а потом для каждой скважины это все сложить...
Как это реализовать не представляю


Кажется у меня кривые руки...
5 мар 18, 13:25    [21237565]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2395
katish444,

select 
скважина
,sum(длина)

from
   (select (max(sampto)-min(SAMPFROM)) as длина 
....)
as t
group by скважина
5 мар 18, 13:49    [21237661]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
katish444
Member

Откуда:
Сообщений: 261
StarikNavy
katish444,

select 
скважина
,sum(длина)

from
   (select (max(sampto)-min(SAMPFROM)) as длина 
....)
as t
group by скважина

так для каждой скважины? а если я не знаю сколько их будет?
5 мар 18, 14:02    [21237721]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
Кусочек
Guest
katish444
StarikNavy
katish444,

select 
скважина
,sum(длина)

from
   (select (max(sampto)-min(SAMPFROM)) as длина 
....)
as t
group by скважина

так для каждой скважины? а если я не знаю сколько их будет?


Вам ничего и не нужно знать, за Вас "знает" сама таблица скважин...
5 мар 18, 14:20    [21237829]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
.Евгений
Member

Откуда:
Сообщений: 516
katish444
Ребят, подскажите пожалуйста, как подсчитать общую длинну пробуренных метров, неважно по какой скважине.
(...)
Кажется у меня кривые руки...

Девушка, вы пишите не про свои руки, а про свое фото в профиле. Оценив кривизну ваших рук и других частей тела, посетители обязательно вам помогут и объяснят, причем очень быстро и охотно.
5 мар 18, 15:35    [21238145]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
katish444
То есть если было бы длина по скважине, то все просто. Ту минус фром, но тут ведь потом эти все длины надо сложить и я совсем не знаю как быть....

То есть сначала
(max(sampto)-min(SAMPFROM))
, а потом для каждой скважины это все сложить...


Уже ведь сама все расписала:

With [Сначала] as 
(Select projectcode,max(sampto)-min(SAMPFROM) as [ДлинаУчасткаСкважины] From @assay
  where cast([LOADDATE] as date) between '13-feb-2017' and '20-oct-2017'
  Group by sampleid,projectcode)

Select projectcode,sum([ДлинаУчасткаСкважины]) as [ДлинаСкважины] From [Сначала]
 Group by projectcode
6 мар 18, 05:17    [21239333]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,
спасибо болшьшое
6 мар 18, 05:52    [21239343]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly
With [Сначала] as 
(Select projectcode,max(sampto)-min(SAMPFROM) as [ДлинаУчасткаСкважины] From @assay
  where cast([LOADDATE] as date) between '13-feb-2017' and '20-oct-2017'
  Group by sampleid,projectcode)

Select projectcode,sum([ДлинаУчасткаСкважины]) as [ДлинаСкважины] From [Сначала]
 Group by projectcode


Помоги мне пожалуйста корректно вставить в скрипт. Куда я только не вставляла и как только не модифицировала - не работает. То одно подчеркнет, то другое. Пыталась перед group by вставить With.... но не сработало...

 Select pp.PROJECTCODE,pp.DESCRIPTION,
a.GeolLenght,
b.SendSample, c.assay, TakenSample 
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as GeolLenght 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) a
full join (
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as SendSample 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID 
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) b on a.x_project =b.x_project


full join
(Select projectcode as x_project, count(sss)assay from (select distinct s.sampleid as sss,PROJECTCODE 
from cORPSAMPLEASSAY c left join sample s on s.SAMPLEID= c.SAMPLEID 
where cast([LOADDATE] as date) between '2017-02-13' and '2017-03-10')abc
group by abc.PROJECTCODE)c on a.x_project=COALESCE(b.x_project,c.x_project)
full join (
 select  ss.PROJECTCODE as x_project,
count(ts.sampleid) as TakenSample 
from  SAMPLEDETAILS ts  left join sample ss on ss.SAMPLEID=ts.SAMPLEID 
where cast((case when name = 'SampDateTaken' then value end) as date) between '13-feb-2017' and '20-feb-2017'  
 group by ss.PROJECTCODE
) t on   t.x_project=COALESCE(a.x_project,b.x_project,c.x_project)
left join PROJECT pp on pp.PROJECTCODE=c.x_project or pp.PROJECTCODE=b.x_project or pp.PROJECTCODE=a.x_project or pp.PROJECTCODE=t.x_project

group by pp.PROJECTCODE,a.GeolLenght,pp.DESCRIPTION,
b.SendSample, c.assay,TakenSample  
order by pp.DESCRIPTION
7 мар 18, 09:41    [21242446]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
katish444,

С наступающим:

Select pp.PROJECTCODE,pp.DESCRIPTION,
a.GeolLenght,
b.SendSample, c.assay, TakenSample , [ДлинаСкважины] 
From 
PROJECT pp 
Left join 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as GeolLenght 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) a	on pp.PROJECTCODE=a.x_project 
left join (
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as SendSample 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID 
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) b on pp.PROJECTCODE=b.x_project
left join
(Select projectcode as x_project, count(sss)assay from (select distinct s.sampleid as sss,PROJECTCODE 
from cORPSAMPLEASSAY c left join sample s on s.SAMPLEID= c.SAMPLEID 
where cast([LOADDATE] as date) between '2017-02-13' and '2017-03-10') abc
group by abc.PROJECTCODE											   
) c on  pp.PROJECTCODE=b.x_project
left join (
 select  ss.PROJECTCODE as x_project,
count(ts.sampleid) as TakenSample 
from  SAMPLEDETAILS ts  left join sample ss on ss.SAMPLEID=ts.SAMPLEID 
where cast((case when name = 'SampDateTaken' then value end) as date) between '13-feb-2017' and '20-feb-2017'  
 group by ss.PROJECTCODE
) t on   pp.PROJECTCODE=t.x_project
left join (
Select projectcode as x_project,sum([ДлинаУчасткаСкважины]) as [ДлинаСкважины] From 
(Select projectcode,max(sampto)-min(SAMPFROM) as [ДлинаУчасткаСкважины] From @assay
  where cast([LOADDATE] as date) between '13-feb-2017' and '20-oct-2017'
  Group by sampleid,projectcode) zz
Group by projectcode
) z on pp.PROJECTCODE=z.x_project

Where 
a.x_project is not null or
b.x_project is not null or
c.x_project is not null or
x.x_project is not null or
t.x_project is not null	or
z.x_project is not null
order by pp.DESCRIPTION
7 мар 18, 09:53    [21242465]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать общую длину?  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly, спасибо огромное
Кажется мне пора делиться с тобой своей зарплатой
12 мар 18, 08:23    [21248427]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить