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

Откуда:
Сообщений: 261
Пыталась решить проблему с float/varchar, которая мне ничего не дала....
Вообщем, попытаюсь объяснить человеческим языком.
Есть геологическое описание скважины. Например from 1000м to 1200м - "алевролиты", но эти 200 метров бурили не в один день, конечно, а недельку. И для суточного отчета по бурению, надо это геологическое описание вытянуть только на тот интервал, который пробурили сегодня. К примеру с 1122 до 1150. Этот интервал полностью попадает. Вот как базе объяснить, что надо брать ближайшее число from и выдавать описание. А если бурили с 1190 до 1225. Тут захватывает уже новый интервал геологического описания. Не могу придумать, как же выпросить у БД именно те интервалы, которые мне нужны.
Есть такая функция, не равно, не больше/равно, а именно ближайшее число. Может Abs(Min(From - EventFromDay)), только не соображу как это в условии прописать


Кажется у меня кривые руки...
25 апр 18, 07:22    [21366483]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
katish444,
Select 
a.[ID_Скважины],
case a.From<b.From Then b.From Else a.From end as [From],
case a.To>b.To Then b.To Else a.To end as [To],
a.[СуточноеОписание],
b.[ОписаниеСлояСкважины]
From 
[СуточныеДанные] a
join [ОписаниеСкважины] b 
 on a.[ID_Скважины] = b.[ID_Скважины] 
and a.From<b.To
and a.To>b.From
Where a.[Дата] = @Date
25 апр 18, 07:34    [21366500]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Kopelly
Member

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

Если за сутки надо показать только один слой:
Select 
a.[ID_Скважины],
case a.From<b.From Then b.From Else a.From end as [From],
case a.To>b.To Then b.To Else a.To end as [To],
a.[СуточноеОписание],
b.[ОписаниеСлояСкважины]
From 
[СуточныеДанные] a
Outer apply (
Select top 1 b.* From [ОписаниеСкважины] b 
Where a.[ID_Скважины] = b.[ID_Скважины] 
and a.From<b.To
Order by b.From) b
Where a.[Дата] = @Date
25 апр 18, 07:36    [21366507]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

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

Если за сутки надо показать только один слой:
Select 
a.[ID_Скважины],
case a.From<b.From Then b.From Else a.From end as [From],
case a.To>b.To Then b.To Else a.To end as [To],
...

Спасибо большое
Сейчас разберусь и буду думать как эту уловку вставить в мой скрипт :-)
Что бы я делала без тебя, билась бы, наверное, головой о стену.... Спасибо!
+
SELECT  TOP 100 PERCENT DRILLINGDETAIL.HOLEID,
case row_number() over(partition by DRILLINGDETAIL.holeid order by tab3.geol_from) when 1 then DRILLINGDETAIL.HOLEID end as x_holeid,
DRILLINGDETAIL.DRILLINGDATE,   DRILLINGDETAIL.PROJECTCODE,  Cast(max(tab3.geol_from) as float)as GeolFrom, max(tab3.geol_to)GeolTo, 
 tab3.[Primary Lithology] ,EventFromDAY,EventTODAY,EventFromNight,EventTOnight
 
					FROM 
					DRILLINGDETAIL

					left join

					(Select holeid,
					 max(   case
				   when [DRILLINGDETAIL].[NAME] = 'EventFrom' and [Shift]='day' then
					   [DRILLINGDETAIL].[VALUE]
				   else
					   ''
			   end)EventFromDAY 
			   ,max(   case
				   when [DRILLINGDETAIL].[NAME] = 'Eventto'  and [Shift]='day'then
					   [DRILLINGDETAIL].[VALUE]
				   else
					   ''
			   end)EventTODAY
			 ,
			 max(   case
				   when [DRILLINGDETAIL].[NAME] = 'EventFrom' and [Shift]='night' then
					   [DRILLINGDETAIL].[VALUE]
				   else
					   ''
			   end)EventFromnight
			   ,max(   case
				   when [DRILLINGDETAIL].[NAME] = 'Eventto'  and [Shift]='night'then
					   [DRILLINGDETAIL].[VALUE]
				   else
					   ''
			   end)EventTOnight 
					FROM 
					DRILLINGDETAIL
					group by HOLEID)tab8 on tab8.HOLEID=DRILLINGDETAIL.HOLEID

LEFT Join 


 ( select holeid,
 case row_number() over(partition by a.holeid order by a.geolfrom) when 1 then a.holeid end as x_holeid, 
case row_number() over(partition by a.holeid,a.geolfrom order by a.geolfrom) when 1 then a.GEOLFROM end as geol_from,
case row_number() over(partition by a.holeid,a.geolfrom,a.geolto order by a.geolfrom) when 1 then a.GEOLTO end as geol_to,
case row_number() over(partition by a.holeid,a.geolfrom,a.geolto,[a].Primary_Lithology_rus_Desc_D order by a.geolfrom) when 1 then [a].Primary_Lithology_rus_Desc_D end as 'Primary Lithology'



 from

( SELECT  TOP 100 PERCENT * FROM (SELECT * FROM (SELECT TOP 100 PERCENT * FROM (SELECT TOP 100 PERCENT [HOLEID], [PROJECTCODE], [GEOLFROM], [GEOLTO], [PRIORITY],  ( CASE WHEN [ACQDERIVEDVIEW].[Lith_RockName_Desc_D] is null THEN '' ELSE [ACQDERIVEDVIEW].[Lith_RockName_Desc_D]
END +
CASE WHEN str([ACQDERIVEDVIEW].[Lith1_pct]) is null THEN '' ELSE '(' + ltrim(str([ACQDERIVEDVIEW].[Lith1_pct])) + '%' + ')'
END + 
CASE WHEN [ACQDERIVEDVIEW].[Lith_Colour_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith_Colour_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_Texture_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith1_Texture_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_Structure_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith1_Structure_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_RockName_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith2_RockName_Desc_D]
END +
CASE WHEN str([ACQDERIVEDVIEW].[Lith2_pct]) is null THEN '' ELSE '(' + ltrim(str([ACQDERIVEDVIEW].[Lith2_pct])) + '%' + ')'
END + 
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Colour_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith2_Colour_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Texture_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith2_Texture_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Structure_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith2_Structure_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith_Comments] is null THEN '' ELSE ', ( ' + [ACQDERIVEDVIEW].[Lith_Comments] + ')'
END
 )  AS [Primary_Lithology_Desc_D],  ( CASE WHEN [ACQDERIVEDVIEW].[Lith_CompRock_rus_Desc_D] is null THEN '' ELSE  [ACQDERIVEDVIEW].[Lith_CompRock_rus_Desc_D]+': '
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith_RockName_rus_Desc_D] is null THEN '' ELSE [ACQDERIVEDVIEW].[Lith_RockName] + ' - ' + [ACQDERIVEDVIEW].[Lith_RockName_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_pct] = 100 THEN ',' ELSE '(' + ltrim(str([ACQDERIVEDVIEW].[Lith1_pct])) + '%' + '),'
END + 
CASE WHEN [ACQDERIVEDVIEW].[Lith_Colour_Int_rus_Desc_D] is null THEN '' ELSE  ' ' +  [ACQDERIVEDVIEW].[Lith_Colour_Int_rus_Desc_D] 
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith_Colour_rus_Desc_D] is null THEN '' ELSE ' ' +  [ACQDERIVEDVIEW].[Lith_Colour_rus_Desc_D] + ' &#246;&#226;&#229;&#242;, '
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith_Colour2_Int_rus_Desc_D] is null THEN '' ELSE [ACQDERIVEDVIEW].[Lith_Colour2_Int_rus_Desc_D] 
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith_Colour2_rus_Desc_D] is null THEN '' ELSE  [ACQDERIVEDVIEW].[Lith_Colour2_rus_Desc_D] + ' - &#226;&#242;&#238;&#240;&#238;&#241;&#242;&#229;&#239;&#229;&#237;&#237;&#251;&#233; &#246;&#226;&#229;&#242; '
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_Texture_rus_Desc_D] is null THEN '' ELSE '&#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#224; ' + [ACQDERIVEDVIEW].[Lith1_Texture_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_Texture2_rus_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith1_Texture2_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_Structure_rus_Desc_D] is null THEN '' ELSE ', &#242;&#229;&#234;&#241;&#242;&#243;&#240;&#224; ' + [ACQDERIVEDVIEW].[Lith1_Structure_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith1_Structure2_rus_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith1_Structure2_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_RockName_rus_Desc_D] is null THEN '' ELSE '; ' + [ACQDERIVEDVIEW].[Lith2_RockName] + ' - ' + [ACQDERIVEDVIEW].[Lith2_RockName_rus_Desc_D]
END +
CASE WHEN str([ACQDERIVEDVIEW].[Lith2_pct]) is null THEN '' ELSE '(' + ltrim(str([ACQDERIVEDVIEW].[Lith2_pct])) + '%' + ')'
END + 
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Colour_rus_Desc_D] is null THEN '' ELSE ', &#246;&#226;&#229;&#242; ' + [ACQDERIVEDVIEW].[Lith2_Colour_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Texture_rus_Desc_D] is null THEN '' ELSE ', &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240;&#224; ' + [ACQDERIVEDVIEW].[Lith2_Texture_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Texture2_rus_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith2_Texture2_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Structure_rus_Desc_D] is null THEN '' ELSE ', &#242;&#229;&#234;&#241;&#242;&#243;&#240;&#224; ' + [ACQDERIVEDVIEW].[Lith2_Structure_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith2_Structure2_rus_Desc_D] is null THEN '' ELSE ', ' + [ACQDERIVEDVIEW].[Lith2_Structure2_rus_Desc_D]
END +
CASE WHEN [ACQDERIVEDVIEW].[Lith_Comments] is null THEN '' ELSE ', ( ' + [ACQDERIVEDVIEW].[Lith_Comments] + ')'
END  )  AS [Primary_Lithology_rus_Desc_D] FROM ( SELECT TOP 100 PERCENT  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_Colour'
and LOOKUP = [DFINDF].[Lith_Colour]
and ACTIVE = 1

 )  AS [Lith_Colour_Desc_D],  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_RockName'
and LOOKUP = [DFINDF].[Lith_RockName]
and ACTIVE = 1 )  AS [Lith_RockName_Desc_D],  ( select LOWER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith1_Structure'
and LOOKUP = [DFINDF].[Lith1_Structure]
and ACTIVE = 1 )  AS [Lith1_Structure_Desc_D],  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith1_Texture'
and LOOKUP = [DFINDF].[Lith1_Texture]
and ACTIVE = 1 )  AS [Lith1_Texture_Desc_D],  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Colour'
and LOOKUP = [DFINDF].[Lith2_Colour]
and ACTIVE = 1 )  AS [Lith2_Colour_Desc_D],  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_RockName'
and LOOKUP = [DFINDF].[Lith2_RockName]
and ACTIVE = 1 )  AS [Lith2_RockName_Desc_D],  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Structure'
and LOOKUP = [DFINDF].[Lith2_Structure]
and ACTIVE = 1 )  AS [Lith2_Structure_Desc_D],  ( select UPPER(LEFT(DESCRIPTION,1))+LOWER(STUFF(DESCRIPTION,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Texture'
and LOOKUP = [DFINDF].[Lith2_Texture]
and ACTIVE = 1 )  AS [Lith2_Texture_Desc_D],  ( select UPPER(LEFT(Reportdesc,1))+UPPER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_CompRock'
and LOOKUP = [DFINDF].[Lith_CompRock]
and ACTIVE = 1 )  AS [Lith_CompRock_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_RockName'
and LOOKUP = [DFINDF].[Lith_RockName]
and ACTIVE = 1
 )  AS [Lith_RockName_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1)) +LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_Colour_Int'
and LOOKUP = [DFINDF].[Lith_Colour_Int]
and ACTIVE = 1

 )  AS [Lith_Colour_Int_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1)) +LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_Colour'
and LOOKUP = [DFINDF].[Lith_Colour]
and ACTIVE = 1

 )  AS [Lith_Colour_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1)) +LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_Colour2_Int'
and LOOKUP = [DFINDF].[Lith_Colour2_Int]
and ACTIVE = 1

 )  AS [Lith_Colour2_Int_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1)) +LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith_Colour2'
and LOOKUP = [DFINDF].[Lith_Colour2]
and ACTIVE = 1

 )  AS [Lith_Colour2_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith1_Texture'
and LOOKUP = [DFINDF].[Lith1_Texture]
and ACTIVE = 1 )  AS [Lith1_Texture_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith1_Texture2'
and LOOKUP = [DFINDF].[Lith1_Texture2]
and ACTIVE = 1 )  AS [Lith1_Texture2_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith1_Structure'
and LOOKUP = [DFINDF].[Lith1_Structure]
and ACTIVE = 1 )  AS [Lith1_Structure_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith1_Structure2'
and LOOKUP = [DFINDF].[Lith1_Structure2]
and ACTIVE = 1 )  AS [Lith1_Structure2_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_RockName'
and LOOKUP = [DFINDF].[Lith2_RockName]
and ACTIVE = 1 )  AS [Lith2_RockName_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Colour'
and LOOKUP = [DFINDF].[Lith2_Colour]
and ACTIVE = 1 )  AS [Lith2_Colour_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Texture'
and LOOKUP = [DFINDF].[Lith2_Texture]
and ACTIVE = 1 )  AS [Lith2_Texture_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Texture2'
and LOOKUP = [DFINDF].[Lith2_Texture2]
and ACTIVE = 1 )  AS [Lith2_Texture2_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Structure'
and LOOKUP = [DFINDF].[Lith2_Structure]
and ACTIVE = 1 )  AS [Lith2_Structure_rus_Desc_D],  ( select LOWER(LEFT(Reportdesc,1))+LOWER(STUFF(Reportdesc,1,1,'')) from QV_VS_LOOKUP_RO
where FIELDTABLE = 'GEOLOGYCODESECONDARY'
and FIELDNAME = 'Lith2_Structure2'
and LOOKUP = [DFINDF].[Lith2_Structure2]
and ACTIVE = 1 )  AS [Lith2_Structure2_rus_Desc_D], [HOLEID], [PROJECTCODE], [GEOLFROM], [GEOLTO], [PRIORITY], [Lith_Comments], [Lith1_pct], [Lith2_pct], [Lith_RockName], [Lith2_RockName] 
FROM  (  SELECT [GEOINTERVAL].[HOLEID], [GEOINTERVAL].[PROJECTCODE], [GEOINTERVAL].[GEOLFROM], [GEOINTERVAL].[GEOLTO], [GEOINTERVAL].[PRIORITY], [GEODETAILS].[Lith_Colour], 
[GEOBIGCOMMENT].[Lith_Comments], [GEODETAILS].[Lith_RockName], CAST([GEODETAILS].[Lith1_pct] AS FLOAT) AS [Lith1_pct], [GEODETAILS].[Lith1_Structure], [GEODETAILS].[Lith1_Texture],
 [GEODETAILS].[Lith2_Colour], CAST([GEODETAILS].[Lith2_pct] AS FLOAT) AS [Lith2_pct], [GEODETAILS].[Lith2_RockName], [GEODETAILS].[Lith2_Structure], [GEODETAILS].[Lith2_Texture], 
 [GEODETAILS].[Lith_CompRock], [GEODETAILS].[Lith_Colour_Int], [GEODETAILS].[Lith_Colour2_Int], [GEODETAILS].[Lith_Colour2], [GEODETAILS].[Lith1_Texture2], [GEODETAILS].[Lith1_Structure2],
  [GEODETAILS].[Lith2_Texture2], [GEODETAILS].[Lith2_Structure2] FROM [GEOINTERVAL] INNER JOIN (SELECT * FROM [HOLELOCATION]) AS [CollarWSF] ON [CollarWSF].[HOLEID] = [GEOINTERVAL].[HOLEID]
    AND [CollarWSF].[PROJECTCODE] = [GEOINTERVAL].[PROJECTCODE] AND [CollarWSF].[HOLETYPE] = 'DRILLHOLE' LEFT JOIN (SELECT [GEODETAILS].[HOLEID], [GEODETAILS].[PROJECTCODE], [GEODETAILS].[GEOLFROM],
	 [GEODETAILS].[GEOLTO], [GEODETAILS].[PRIORITY], min(CASE when [GEODETAILS].[NAME] = 'Lith_Colour' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith_Colour], min(CASE when [GEODETAILS].[NAME] = 'Lith_RockName' 
	 then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith_RockName], min(CASE when [GEODETAILS].[NAME] = 'Lith1_pct' then CAST([GEODETAILS].[VALUE] AS FLOAT) ELSE NULL END) as [Lith1_pct], min(CASE when [GEODETAILS].[NAME] = 'Lith1_Structure' 
	 then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith1_Structure], min(CASE when [GEODETAILS].[NAME] = 'Lith1_Texture' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith1_Texture], min(CASE when [GEODETAILS].[NAME] = 'Lith2_Colour' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith2_Colour], 
min(CASE when [GEODETAILS].[NAME] = 'Lith2_pct' then CAST([GEODETAILS].[VALUE] AS FLOAT) ELSE NULL END) as [Lith2_pct], min(CASE when [GEODETAILS].[NAME] = 'Lith2_RockName' 
then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith2_RockName], min(CASE when [GEODETAILS].[NAME] = 'Lith2_Structure' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith2_Structure], min(CASE when [GEODETAILS].[NAME] = 'Lith2_Texture' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith2_Texture],
 min(CASE when [GEODETAILS].[NAME] = 'Lith_CompRock' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith_CompRock], min(CASE when [GEODETAILS].[NAME] = 'Lith_Colour_Int' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith_Colour_Int], min(CASE when [GEODETAILS].[NAME] = 'Lith_Colour2_Int'
  then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith_Colour2_Int], min(CASE when [GEODETAILS].[NAME] = 'Lith_Colour2' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith_Colour2], min(CASE when [GEODETAILS].[NAME] = 'Lith1_Texture2' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith1_Texture2], 
  min(CASE when [GEODETAILS].[NAME] = 'Lith1_Structure2' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith1_Structure2], min(CASE when [GEODETAILS].[NAME] = 'Lith2_Texture2' then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith2_Texture2], min(CASE when [GEODETAILS].[NAME] = 'Lith2_Structure2' 
  then [GEODETAILS].[VALUE] ELSE NULL END) as [Lith2_Structure2] FROM [GEODETAILS] GROUP BY [GEODETAILS].[PROJECTCODE], [GEODETAILS].[PRIORITY], [GEODETAILS].[GEOLTO], [GEODETAILS].[GEOLFROM], [GEODETAILS].[HOLEID])[GEODETAILS] ON [GEOINTERVAL].[PROJECTCODE] = [GEODETAILS].[PROJECTCODE] 
  AND [GEOINTERVAL].[PRIORITY] = [GEODETAILS].[PRIORITY] AND [GEOINTERVAL].[GEOLTO] = [GEODETAILS].[GEOLTO] AND [GEOINTERVAL].[GEOLFROM] = [GEODETAILS].[GEOLFROM] AND [GEOINTERVAL].[HOLEID] = [GEODETAILS].[HOLEID] LEFT JOIN (SELECT [GEOBIGCOMMENT].[HOLEID], [GEOBIGCOMMENT].[PROJECTCODE], 
  [GEOBIGCOMMENT].[GEOLFROM], [GEOBIGCOMMENT].[GEOLTO], [GEOBIGCOMMENT].[PRIORITY], 
min(CASE when [GEOBIGCOMMENT].[NAME] = 'Lith_Comments' 
then [GEOBIGCOMMENT].[VALUE] ELSE NULL END) as [Lith_Comments] FROM [GEOBIGCOMMENT] WHERE [GEOBIGCOMMENT].[NAME] IN ('Lith_Comments') 
GROUP BY [GEOBIGCOMMENT].[PROJECTCODE], [GEOBIGCOMMENT].[PRIORITY], [GEOBIGCOMMENT].[GEOLTO], [GEOBIGCOMMENT].[GEOLFROM], [GEOBIGCOMMENT].[HOLEID])[GEOBIGCOMMENT] 
ON [GEOINTERVAL].[PROJECTCODE] = [GEOBIGCOMMENT].[PROJECTCODE] AND [GEOINTERVAL].[PRIORITY] = [GEOBIGCOMMENT].[PRIORITY] AND [GEOINTERVAL].[GEOLTO] = [GEOBIGCOMMENT].[GEOLTO]
 AND [GEOINTERVAL].[GEOLFROM] = [GEOBIGCOMMENT].[GEOLFROM] AND [GEOINTERVAL].[HOLEID] = [GEOBIGCOMMENT].[HOLEID] WHERE ([Lith_Colour] IS NOT NULL OR [Lith_Comments] IS NOT NULL 
 OR [Lith_RockName] IS NOT NULL OR [Lith1_pct] IS NOT NULL OR [Lith1_Structure] IS NOT NULL OR [Lith1_Texture] IS NOT NULL OR [Lith2_Colour] IS NOT NULL OR [Lith2_pct] IS NOT NULL
  OR [Lith2_RockName] IS NOT NULL OR [Lith2_Structure] IS NOT NULL OR [Lith2_Texture] IS NOT NULL OR [Lith_CompRock] IS NOT NULL OR [Lith_Colour_Int] IS NOT NULL OR [Lith_Colour2_Int] IS NOT NULL 
  OR [Lith_Colour2] IS NOT NULL OR [Lith1_Texture2] IS NOT NULL OR [Lith1_Structure2] IS NOT NULL OR [Lith2_Texture2] IS NOT NULL OR [Lith2_Structure2] IS NOT NULL)  ) [DFINDF]) [ACQDERIVEDVIEW]) [ACQTMP]  ) AS [TMPVIEW915]) [TMPSQLSHEETVIEW]) a

)tab3 on


 tab3.holeid=DRILLINGDETAIL.HOLEID where [DRILLINGDETAIL].[PROJECTCODE] = 'ma' 
 ---and x_holeid='makh-17-005'
 cast(DRILLINGDETAIL.DRILLINGDATE as datetime)= '15-jul-2017' and geol_from<=(cast(EventFromDAY as float))<=geol_to

 group by   DRILLINGDETAIL.HOLEID, DRILLINGDETAIL.PROJECTCODE, tab3.[Primary Lithology] ,DRILLINGDETAIL.DRILLINGDATE,tab3.geol_from,tab3.geol_to,tab3.x_holeid ,tab3.holeid,EventFromDAY ,EventTODAY,EventFromNight,EventTOnight
 
 ORDER BY cast(DRILLINGDETAIL.DRILLINGDATE as datetime),tab3.holeid,tab3.x_holeid desc,geol_from
25 апр 18, 07:49    [21366528]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Kopelly
Member

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

ОДин слой за сутки наверно так правильнее будет:
Select 
a.[ID_Скважины],a.[From],a.[To],a.[СуточноеОписание],
b.[ОписаниеСлояСкважины]
From 
[СуточныеДанные] a
join [ОписаниеСкважины] b 
 on a.[ID_Скважины] = b.[ID_Скважины] 
and a.From<b.To
and a.To>b.From
Where a.[Дата] = @Date
25 апр 18, 07:52    [21366531]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

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

ОДин слой за сутки наверно так правильнее будет:
Select 
a.[ID_Скважины],a.[From],a.[To],a.[СуточноеОписание],
b.[ОписаниеСлояСкважины]
From 
[СуточныеДанные] a
join [ОписаниеСкважины] b 
 on a.[ID_Скважины] = b.[ID_Скважины] 
and a.From<b.To
and a.To>b.From
Where a.[Дата] = @Date

Нет, если я правильно поняла, то это не пойдет. Ведь значений, где
and a.From<b.To
and a.To>b.From
очень много. Все значения меньше 1122, к примеру будут меньше...
25 апр 18, 09:11    [21366666]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Kopelly
Member

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

Че-то туплю, для одного слоя:
Select 
a.[ID_Скважины],a.[From],a.[To],
a.[СуточноеОписание],
b.[ОписаниеСлояСкважины]
From 
[СуточныеДанные] a
Outer apply (
Select top 1 b.* From [ОписаниеСкважины] b 
Where a.[ID_Скважины] = b.[ID_Скважины] 
and a.From<b.To
Order by b.From) b
Where a.[Дата] = @Date
25 апр 18, 10:03    [21366820]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,
спасибо большущее!
С меня шоколадка)))
25 апр 18, 11:08    [21367079]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
tip78
Member

Откуда: Москва
Сообщений: 986
сдаётся мне, вам бы там процедурка с циклом не помешала
25 апр 18, 11:40    [21367186]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
tip78
сдаётся мне, вам бы там процедурка с циклом не помешала

курсор + цикл, шобы всё как у людей
25 апр 18, 11:55    [21367255]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
tip78
сдаётся мне, вам бы там процедурка с циклом не помешала

я не умею...
25 апр 18, 12:27    [21367372]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,не сработало. Он не выдает значение описания скважины. Пишет NULL

Select 
a.[holeid],a.[EventFromDAY],a.[EventTOnight],
a.[DRILLINGDATE],
(   case
				   when b.[NAME] = 'Lith_RockName'  then
					  b.[VALUE] end)Lith_RockName
From 
(Select holeid,drillingdate,
					 max(   case
				   when [DRILLINGDETAIL].[NAME] = 'EventFrom' and [Shift]='day' then
					   [DRILLINGDETAIL].[VALUE]
				   
			   end)EventFromDAY 
			  
			   ,max(   case
				   when [DRILLINGDETAIL].[NAME] = 'Eventto'  and [Shift]='night'then
					   [DRILLINGDETAIL].[VALUE]
				  
			   end)EventTOnight 
					FROM 
					DRILLINGDETAIL
					group by HOLEID,drillingdate) a

Outer apply (
Select top 1 b.* From [Geodetails] b 
Where a.[HOLEID] = b.[HOLEID] 
and a.EventFromDAY<b.GEOLTO
Order by b.GEOLTO) b

Where a.[DRILLINGDATE] = '15-jul-2017'
Group by a.[holeid],a.[DRILLINGDATE],a.[EventFromDAY],a.[EventTOnight],b.NAME,b.VALUE
25 апр 18, 12:28    [21367378]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
TaPaK, да не могу я так. Руки то у меня кривые)))
SQL изучала на каком-то курсе в школе...Все на этом...
25 апр 18, 12:30    [21367388]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,
вот...

К сообщению приложен файл. Размер - 16Kb
25 апр 18, 12:31    [21367391]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,
Вот так выглядят таблицы
declare  @geodetails  table (holeid varchar(255),projectcode varchar(255),  geofrom float, geoto float,[value] varchar(255), name varchar(20))
insert into @assay  (holeid,projectcode ,  geofrom , geoto ,[value] , name) values ('UZ-001', 'uz', 1075, 1320,'AL','Lith_RockName')
insert into @assay  (holeid,projectcode ,  geofrom , geoto ,[value] , name) values ('UZ-001', 'uz', 1045, 1075,'Br','Lith_RockName')

declare  @drillingdetail  table (holeid varchar(255),drillingdate varchar(255),  varchar(255), name varchar(20))
insert into @drillingdetail  (holeid,drillingdate ,  [value] , name) values ('UZ-001','15-jul-2017', 'EventFrom','1040')
insert into @drillingdetail  (holeid,drillingdate ,  [value] , name) values ('UZ-001','15-jul-2017', 'EventTo','1060')
insert into @drillingdetail  (holeid,drillingdate ,  [value] , name) values ('UZ-001','16-jul-2017', 'EventFrom','1150')
insert into @drillingdetail  (holeid,drillingdate ,  [value] , name) values ('UZ-001','16-jul-2017', 'EventTo','1172')


Получить надо примерно как на картинке ниже
25 апр 18, 12:41    [21367436]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

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

К сообщению приложен файл. Размер - 19Kb
25 апр 18, 12:41    [21367437]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Kopelly
Member

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

Судя по всему не повезло - у первой попавшейся записи [NAME] <> 'Lith_RockName'

Select 
a.[holeid],a.[EventFromDAY],a.[EventTOnight],
a.[DRILLINGDATE],
b.[VALUE] Lith_RockName
From 
(Select holeid,drillingdate,
					 max(   case
				   when [DRILLINGDETAIL].[NAME] = 'EventFrom' and [Shift]='day' then
					   [DRILLINGDETAIL].[VALUE]
				   
			   end)EventFromDAY 
			  
			   ,max(   case
				   when [DRILLINGDETAIL].[NAME] = 'Eventto'  and [Shift]='night'then
					   [DRILLINGDETAIL].[VALUE]
				  
			   end)EventTOnight 
					FROM 
					DRILLINGDETAIL
					group by HOLEID,drillingdate) a

Outer apply (
Select top 1 b.* From [Geodetails] b 
Where a.[HOLEID] = b.[HOLEID] 
and a.EventFromDAY<b.GEOLTO
and b.[NAME] = 'Lith_RockName'
Order by b.GEOLTO) b

Where a.[DRILLINGDATE] = '15-jul-2017'
Group by a.[holeid],a.[DRILLINGDATE],a.[EventFromDAY],a.[EventTOnight],b.NAME,b.VALUE
25 апр 18, 12:42    [21367446]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,
О, боги Олимпа!
У тебя снова получилось!
Спасибо большое!
25 апр 18, 12:49    [21367476]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly,
рано я обрадовалась. Если интервал бурения попадает в два интервала описания, то он берет только первый....
Вот например тут должна быть еще строчка...
С геологическим описанием, т.к. в таблице описания интервалы 1136-1175 и следующий 1175-1183

К сообщению приложен файл. Размер - 19Kb
25 апр 18, 12:54    [21367494]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

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

в принципе, я сделала top 2 врядли они будут бурить больше 40 метров в день. Спасибо
25 апр 18, 12:57    [21367511]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
katish444
Kopelly,
рано я обрадовалась. Если интервал бурения попадает в два интервала описания, то он берет только первый....
Вот например тут должна быть еще строчка...
С геологическим описанием, т.к. в таблице описания интервалы 1136-1175 и следующий 1175-1183


Я же тебе уже писал как получить все слои за день
25 апр 18, 13:05    [21367539]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Kopelly
katish444
Kopelly,
рано я обрадовалась. Если интервал бурения попадает в два интервала описания, то он берет только первый....
Вот например тут должна быть еще строчка...
С геологическим описанием, т.к. в таблице описания интервалы 1136-1175 и следующий 1175-1183


Я же тебе уже писал как получить все слои за день


Потому что я глупая, я же вставляю твои идеи в свой скрипт, вот кряхтела я долго - не сработало!
Думаю не катит, и что оказалось?! Я просто не заметила, что там WHEN в кейсах не хватает
Спасибо большое! Сейчас думаю все попрет!
25 апр 18, 13:30    [21367636]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Наймите уже Kopelly в штат внештатным консультантом.
25 апр 18, 16:22    [21368465]     Ответить | Цитировать Сообщить модератору
 Re: Как объяснить базе данных, что мне необходимо ближайшее значение  [new]
katish444
Member

Откуда:
Сообщений: 261
Руслан Дамирович
Наймите уже Kopelly в штат внештатным консультантом.

давно пора)))
26 апр 18, 09:24    [21369997]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить