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

Откуда: Опорный край державы
Сообщений: 34
Добрый день, прошу помочь разобраться в ситуации.

Есть таблица каталог, которую я соединяю с таблицей добычи по коду. Там много соединений, и вот одно из них нужно хитро сделать.

На скриншоте я показал вывод того что есть.

Мне же нужно получить Dob для допустим 2015 года и при этом сгруппировать по WG, то есть на скрине должны остаться только две нижние строчки. (поле God не заполнено случайно, оно может быть и заполнено).

Все это я планирую засунуть в join потом, но никак не могу понять как построить группировку - получается я должен к Code_VZ добавить все варианты Code_WG, и уже если есть 2015 год то вывести Dob.

Прошу помочь

К сообщению приложен файл. Размер - 115Kb
8 июн 17, 10:37    [20549163]     Ответить | Цитировать Сообщить модератору
 Re: Вывод в joine  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7758
j-ester,

Вы напишите, что требуется сделать, а не как Вы это делаете.
8 июн 17, 11:00    [20549262]     Ответить | Цитировать Сообщить модератору
 Re: Вывод в joine  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
j-ester
Мне же нужно получить Dob для допустим 2015 года
where Dob = 2015
j-ester
и при этом сгруппировать по WG
group by WG
j-ester
никак не могу понять как построить группировку - получается я должен к Code_VZ добавить все варианты Code_WG, и уже если есть 2015 год то вывести Dob.
Эээ, зачем "к Code_VZ добавить все варианты Code_WG"? Задача какая, "получить Dob для 2015 года, сгруппировать по WG"? Вот и делайте, что нужно.
Либо опишите задачу более понятно. И, конечно, без скриншотов.
8 июн 17, 11:26    [20549364]     Ответить | Цитировать Сообщить модератору
 Re: Вывод в joine  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
Смотрите: есть запрос большой, который все делает ПОЧТИ как надо, НО:

/****** Сценарий для команды SelectTopNRows среды SSMS  ******/
use GMSN_Yanao
go
SELECT VZ_catalogue.Code_VZ,
	VZ_catalogue.Vodozabor,
	Voc_region.Region,
	VZ_catalogue.Adres,
	Voc_gg_structure.gg_structure,
	Voc_gidr.Gidrograf_ed,
	VZ_correspondence.Shir_grad,
	VZ_correspondence.Shir_min,
	VZ_correspondence.Shir_sec,
	VZ_correspondence.Dolg_grad,
	VZ_correspondence.Dolg_min,
	VZ_correspondence.Dolg_sec,
	Voc_water_gorizont.WG_index,
	Voc_water_gorizont.Water_gorizont,
	VZ_dob_god.God,
	Voc_use_type.Use_type_abbr,
	VZ_dob_god.Dob/1000,
	WU_catalogue.WaterUser,
	'СЛХ'+ VZ_license.Lic_number+Voc_wl_vid.WL_vid_abbr,
	Voc_water_type.Water_type
	     
  FROM [GMSN_Yanao].[dbo].[VZ_catalogue]
  left outer join Voc_region
  ON VZ_catalogue.Code_district = Voc_region.Code_region
  
  left outer join VZ_correspondence
  ON VZ_catalogue.Code_VZ = VZ_correspondence.Code_VZ
  
  left outer join Voc_gg_structure
  ON VZ_correspondence.Code_gg_structure = Voc_gg_structure.Code_gg_structure
  
  left outer join Voc_gidr
  ON VZ_correspondence.Code_gidr = Voc_gidr.Code_gidr
  
  
  --ALARM!!!!!
  left outer join VZ_dob_god
  ON VZ_catalogue.Code_VZ = VZ_dob_god.Code_VZ 
  AND VZ_dob_god.God = 2016
  
  left outer join Voc_water_gorizont
  ON VZ_dob_god.Code_WG = Voc_water_gorizont.Code_WG

  --END ALARM!!!!!

  left outer join Voc_use_type
  ON VZ_catalogue.Code_use_type = Voc_use_type.Code_use_type
  

  
  left outer join Voc_water_type
  ON VZ_catalogue.Code_water_type = Voc_water_type.Code_water_type
  
  left outer join VZ_license
  ON VZ_catalogue.Code_VZ = VZ_license.Code_VZ 
  --AND WU_catalogue.Code_WU = VZ_license.Code_WU 
  AND (YEAR(VZ_license.Lic_date) <= 2016 AND YEAR(VZ_license.Lic_srok) >= 2016 )
  AND VZ_license.Lic_date_otz IS NULL 
  --AND YEAR(VZ_license.Lic_date_otz) <= 2016)
  
  left outer join Voc_wl_vid
  ON VZ_license.Code_wl_vid = Voc_wl_vid.Code_wl_vid
  
  left outer join WU_catalogue
  ON VZ_license.Code_WU = WU_catalogue.Code_WU
  
  where VZ_catalogue.Code_use_type IS NOT NULL
  --AND (YEAR(VZ_license.Lic_date) <= 2016 AND YEAR(VZ_license.Lic_srok) >= 2016)
  --AND  VZ_catalogue.Code_VZ = 711581019
 --AND VZ_license.Lic_date_otz IS NOT NULL 



Вот этот вот блок выводит из связанной таблицы только данные по ГОДУ

  --ALARM!!!!!
  left outer join VZ_dob_god
  ON VZ_catalogue.Code_VZ = VZ_dob_god.Code_VZ 
  AND VZ_dob_god.God = 2016
  
  left outer join Voc_water_gorizont
  ON VZ_dob_god.Code_WG = Voc_water_gorizont.Code_WG

  --END ALARM!!!!!



Сам запрос из связанной таблицы выводит для одного объекта это:

Code_VZ Code_WG God Dob
711581019 16 2013 NULL
711581019 16 2014 5298.753
711581019 16 2015 5857.471
711581019 16 2016 5562.025
711581019 24 2011 NULL

В моем запросу указан ГОД, за который нужно вывести добычу, он и выводит ТОЛЬКО 2015 или 2016 год.

Но так же нужно вывести последнюю строку, так как там другой Code_WG

Другими словами по Code_VZ в большом запросе я должен вывести все варианты Code_WG, и если есть добыча за указанный год то вывести, иначе NULL.
8 июн 17, 13:43    [20550016]     Ответить | Цитировать Сообщить модератору
 Re: Вывод в joine  [new]
Remind
Member

Откуда: UK
Сообщений: 523
j-ester,

SELECT
  Code_VZ,
  Code_WG,
  dob = (select dob from Z_dob_god t2 where t2.Code_VZ = t.Code_VZ and t2.Code_WG = t.Code_WG and t2.God = 2015)
FROM VZ_dob_god t
GROUP BY Code_VZ, Code_WG
8 июн 17, 14:07    [20550109]     Ответить | Цитировать Сообщить модератору
 Re: Вывод в joine  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Или вот так:
SELECT
  Code_VZ,
  Code_WG,
  dob = sum(case when god = 2015 then dob end)
FROM VZ_dob_god t
GROUP BY Code_VZ, Code_WG
8 июн 17, 16:56    [20550860]     Ответить | Цитировать Сообщить модератору
 Re: Вывод в joine  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
Remind,

Спасибо большое лично от меня и от Гидрогеологов Урала Вам лично! Получилось!
13 июн 17, 10:23    [20559536]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить