powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод только одно значение для повторяющихся полей без группировки, как ?
7 сообщений из 7, страница 1 из 1
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39627802
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, подскажите:
Имеется запрос который выводит каталог объектов с группировкой,

180902 180900 25.09.2002 ТКЗ 36//02 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований 83 ХПВН 8 8 0 03 0 2017 0.0488075 12.9 180902 180900 27.05.2010 ТКЗ 158 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований 83 ХПВН 03 0 0 -0.3 0 2017 0.0488075 12.9

Дело в том, что в каталоге и НУЖНО выводить две строки, так как у них разные даты (третий столбец), НО вот выделенные жирным две последние строки выводят запасы на объекте, а так 4как объект ОДИН (одинаковый код), то нужно чтоб было ДВЕ строки, но запасы заполнялись только В ОДНОЙ ИЗ НИХ - в любой. Сумма чтоб в итоге сходилась.

Как хочу получить результат:

180902 180900 25.09.2002 ТКЗ 36//02 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований 83 ХПВН 8 8 0 03 0 2017 0.0488075 12.9 180902 180900 27.05.2010 ТКЗ 158 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований 83 ХПВН 03 0 0 -0.3 0 2017 NULL NULL

То есть в зависимости, выведен ли код, выводить для одного кода добычу только один раз.

Прошу помощи, совсем не представляю как такое сделать.

MS SQL EXPRESS 2008 R2
...
Рейтинг: 0 / 0
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39627809
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
программирование по картинке?
пронумеровать строки в группе, через case выводит значения только для "первой" строки группы.
...
Рейтинг: 0 / 0
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39627813
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дедушка,


А можно чуть подробнее?
И что значит по картинке - если нужен код запроса, то пожалуйста:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
--БАЛАНСОВЫЕ ЗАПАСЫ!!!!!
WITH myCTE (MPV_COD, [MPV_name],  MPV_parent, MPV_NAME_PREDOK, Code_use_type, Code_mon_type, Code_district, Code_water_type, Adres) AS
	(
	/* выборка потомков и предков из таблицы ВГ*/
	SELECT t1.Code_MPV MPV_COD ,t1.[MPV_name] MPV_COD,  t2.Code_MPV MPV_parent, t2.[MPV_name] MPV_NAME_PREDOK, t1.Code_use_type Code_use_type, t1.Code_mon_type Code_mon_type, t1.Code_district Code_district, t1.Code_water_type Code_water_type, t1.Adres Adres
	FROM MPV_catalogue t1
	LEFT JOIN MPV_catalogue t2 ON t1.Code_parent = t2.Code_MPV
	)
SELECT 
	----Код МПВ

	
			myCTE.MPV_COD as 'Служебный',
	case when myCTE.Code_mon_type = '1'
	then myCTE.MPV_COD
	else myCTE.MPV_parent end as 'КОД МПВ',

	case when myCTE.Code_mon_type = '2'
--	then ' ****** ' 
	then myCTE.MPV_NAME_PREDOK
	else myCTE.MPV_name end as 'МПВ',
	
	case when myCTE.Code_mon_type = '2'
	then myCTE.MPV_COD
	else NULL end as 'КОД УМПВ',
	
	case when myCTE.Code_mon_type = '1'
	then ' ****** '
	else myCTE.MPV_name end as 'УМПВ',
	
	Voc_region.Region,
	myCTE.Adres,
	Voc_gg_structure.gg_structure,
	Voc_gidr.Gidrograf_ed,
	MPV_correspondence.Shir_grad, MPV_correspondence.Shir_min, MPV_correspondence.Shir_sec,
	MPV_correspondence.Dolg_grad, MPV_correspondence.Dolg_min, MPV_correspondence.Dolg_sec,
	--CAST(MPV_catalogue.DataExp AS date),
	convert(varchar, MPV_Spares_WG.Datauz ,104) as DataExp,
	Voc_inst.Inst,
	REPLACE(MPV_Spares_WG.nprot,'/','//') as nprot,
	Voc_water_gorizont.WG_index,
	Voc_water_gorizont.Water_gorizont,
--	[MPV_Spares_WG].Code_WG as 'Код ВГ на МПВ',

--группировка	[VZ_dob_god].Code_WG as 'Код ВГ на ВЗ',
	Voc_use_type.Use_type_abbr,
	REPLACE(AVG(MPV_Spares_WG.szapg),'.',',') as szapg,
	REPLACE(MPV_Spares_WG.zapA,'.',',') as zapA, REPLACE(MPV_Spares_WG.zapB,'.',',') as zapB, REPLACE(MPV_Spares_WG.zapC1,'.',',') as zapC1, REPLACE(MPV_Spares_WG.zapC2,'.',',') as zapC2,
--группировка	VZ_correspondence.Code_VZ,

	REPLACE(dbo.VZ_dob_god.Dob/1000,'.',',') as 'Dob/1000',
	--REPLACE(dbo.VZ_dob_god.Dob_god,'.',',') as Dob_god,
	цифры в запорсе неактуальны
--	REPLACE(AVG(dbo.VZ_dob_god.Dob_god),'.',',') as Dob_GOD,

	Voc_water_type.Water_type
	

from myCTE

left outer join MPV_correspondence
ON myCTE.MPV_COD = MPV_correspondence.Code_MPV

left outer join Voc_region
ON myCTE.Code_district = Voc_region.Code_region

left outer join Voc_gg_structure 
ON MPV_correspondence.Code_gg_structure = Voc_gg_structure.Code_gg_structure

left outer join	dbo.Voc_gidr 
ON MPV_correspondence.Code_gidr = Voc_gidr.Code_gidr

left outer join	dbo.MPV_Spares_WG 
ON myCTE.MPV_COD = MPV_Spares_WG.Code_MPV

left outer join Voc_inst 
ON MPV_Spares_WG.Code_inst = Voc_inst.Code_inst

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

left outer join Voc_water_gorizont 
ON MPV_Spares_WG.Code_WG = Voc_water_gorizont.Code_WG

left outer join	dbo.VZ_correspondence 
ON myCTE.MPV_COD = dbo.VZ_correspondence.Code_MPV
	
left outer join	dbo.VZ_dob_god 
ON VZ_correspondence.Code_VZ = VZ_dob_god.Code_VZ AND VZ_dob_god.God = 2015

left outer join	dbo.Voc_water_type 
ON myCTE.Code_water_type = dbo.Voc_water_type.Code_water_type

--where MPV_Spares_WG.Datasz IS NULL AND MPV_Spares_WG.Code_inst IS NOT NULL
--AND MPV_Spares_WG.szapg IS NOT NULL


--ВАРИНАТ ИЗ ОБОЩАЮЩИХ ТАБЛИЦ
WHERE     (YEAR(dbo.MPV_Spares_WG.Datauz) <= 2015) AND (YEAR(dbo.MPV_Spares_WG.Datasz) > 2015 OR
                      YEAR(dbo.MPV_Spares_WG.Datasz) IS NULL) AND (dbo.f_get_count_parts(myCTE.MPV_COD) = 0) 

and MPV_Spares_WG.szapg <> 0


 
 GROUP BY
 	myCTE.MPV_COD,
	myCTE.Code_mon_type,
	myCTE.MPV_name,
	myCTE.MPV_parent,
	myCTE.MPV_NAME_PREDOK,
	Voc_region.Region,
	myCTE.Adres,
	Voc_gg_structure.gg_structure,
	Voc_gidr.Gidrograf_ed,
	MPV_correspondence.Shir_grad, MPV_correspondence.Shir_min, MPV_correspondence.Shir_sec,
	MPV_correspondence.Dolg_grad, MPV_correspondence.Dolg_min, MPV_correspondence.Dolg_sec,
	MPV_Spares_WG.Datauz,
	Voc_inst.Inst,
	MPV_Spares_WG.nprot,
	Voc_water_gorizont.WG_index,
	Voc_water_gorizont.Water_gorizont,
	[MPV_Spares_WG].Code_WG,

	Voc_use_type.Use_type_abbr,

	MPV_Spares_WG.zapA,
	MPV_Spares_WG.zapB,
	MPV_Spares_WG.zapC1,
	MPV_Spares_WG.zapC2,

	Voc_water_type.Water_type





Я так понял нужно использовать через вложенный запрос с ROW NUMBER ??
...
Рейтинг: 0 / 0
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39627823
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильно
Код: sql
1.
2.
3.
CASE 
  WHEN 1 = ROW_NUMBER() OVER ( PARTITION BY <список полей, для которых "0.0488075" должно выводиться один раз"> ORDER BY <дата, номер по порядку или "1/0"> ) THEN <"0.0488075">
END
...
Рейтинг: 0 / 0
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39627853
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович,

Спасибо! Сделал одно поломал другое. Раньше выводилось через AVG(Добыча) - две строчки

Сейчас да - выводиться один раз, но стал соединять ДВЕ записи пустые + ДВЕ записи одна с Добычей другая ПУСТО.

Если не сложно не подскажете как объединить case ROW_NUMBER с joim и GROUP BY ??

36//02 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований ХПВН NULL158 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований ХПВН NULL36//02 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований ХПВН 4857.627158 b(R-С1) Зона рифейско-нижнекаменноугольных вулканогенных образований ХПВН NULL

Код: sql
1.
2.
3.
	CASE 
		WHEN 1 = ROW_NUMBER() OVER ( PARTITION BY VZ_dob_god.Dob ORDER BY VZ_dob_god.Dob ) THEN VZ_dob_god.Dob
	END,



Не могу понять как с ним CASE-ом сгруппировать данные

При этом имеется

GROUP BY VZ_dob_god.Dob для всего запроса.
...
Рейтинг: 0 / 0
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39627919
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович,

Простите, заработался , глаз замылился.

Все получилось, всем огромное спасибо за помощь и полученный опыт.
...
Рейтинг: 0 / 0
Вывод только одно значение для повторяющихся полей без группировки, как ?
    #39628622
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи - теперь если столбец который надо выводить один раз совпадает со столбцом из другого объекта - то выводится только один из них.... Можно ли сделать уникально внутри одного объекта по коду ??
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод только одно значение для повторяющихся полей без группировки, как ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]