Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка без null / 21 сообщений из 21, страница 1 из 1
24.01.2018, 09:25
    #39589682
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Скажите пожалуйста, как сгруппировать так, чтобы все данные подтянулись вверх без null?

То есть чтобы в все null оказались внизу, а все данные вверху?

Заранее благодарен.
...
Рейтинг: 0 / 0
24.01.2018, 09:43
    #39589693
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Точно нужна группировка, а не сортировка?
...
Рейтинг: 0 / 0
24.01.2018, 09:50
    #39589697
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Akina,

можно и сортировка, но как?
...
Рейтинг: 0 / 0
24.01.2018, 09:55
    #39589702
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
vahAkina,

можно и сортировка, но как?Сортировку делают написанием ORDER BY в конце запроса.
Можно отсортировать по выражению:
Код: sql
1.
case when [111] is null then 1 else 0 end
...
Рейтинг: 0 / 0
24.01.2018, 10:00
    #39589710
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
alexeyvg,

вроде тоже самое получится...
...
Рейтинг: 0 / 0
24.01.2018, 10:04
    #39589715
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
vah,

а без вроде?
хоть так
Код: sql
1.
ORDER BY case when [111] is null then 1 else 0 end


хоть
Код: sql
1.
ORDER BY ISNULL(111,'zzz')
...
Рейтинг: 0 / 0
24.01.2018, 10:06
    #39589717
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
vahalexeyvg,

вроде тоже самое получится...Нет.
Репро приведите, или хоть код покажите, что вы там написали.
...
Рейтинг: 0 / 0
24.01.2018, 10:12
    #39589722
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
alexeyvg,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	declare @sql nvarchar(max)=''

	set @sql = @sql + 'SELECT '+@var+' FROM (' + char(10) 
	set @sql = @sql + 'select distinct a.id,b.id idm,b.parentId,b.name from '  + char(10)  
	set @sql = @sql + '#tmp_struct a inner join #tmp_struct b on a.id=b.parentId' + char(10)  
	set @sql = @sql + 'where a.lvl=1' + char(10)  
	set @sql = @sql + ') AS pr ' + char(10) 
	set @sql = @sql + 'PIVOT (max(name) FOR [id] in ('+ @var+')) AS pvt'

	exec (@sql)
...
Рейтинг: 0 / 0
24.01.2018, 10:16
    #39589726
Группировка без null
vahalexeyvg,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	declare @sql nvarchar(max)=''

	set @sql = @sql + 'SELECT '+@var+' FROM (' + char(10) 
	set @sql = @sql + 'select distinct a.id,b.id idm,b.parentId,b.name from '  + char(10)  
	set @sql = @sql + '#tmp_struct a inner join #tmp_struct b on a.id=b.parentId' + char(10)  
	set @sql = @sql + 'where a.lvl=1' + char(10)  
	set @sql = @sql + ') AS pr ' + char(10) 
	set @sql = @sql + 'PIVOT (max(name) FOR [id] in ('+ @var+')) AS pvt'

	exec (@sql)

не увидел группировки или сортировки. от слова - совсем...
...
Рейтинг: 0 / 0
24.01.2018, 10:28
    #39589737
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Мне кажется мы его не так поняли, видимо он хочет чтобы было типа:
PR, СЛАБ, ?, ПКФ, Советник, это одна строка, и далее в том же духе.
...
Рейтинг: 0 / 0
24.01.2018, 10:30
    #39589739
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
aleksrov,

вот именно, сложно объяснить
...
Рейтинг: 0 / 0
24.01.2018, 10:34
    #39589746
Группировка без null
vah,

что ли, просто в каждом столбце сдвинуть все данные вверх?

тогда тебе нужно разложить выборку на таблицы-столбцы. сделать столько таблиц, сколько столбцов желаешь видеть в итоговой выборке. каждую получившуюся таблицу-столбец перенумеровать при помощи row_number. далее фулл джойном соединить все эти поля-таблицы в один итоговый набор данных....
...
Рейтинг: 0 / 0
24.01.2018, 10:35
    #39589748
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
vahaleksrov,
вот именно, сложно объяснить
Сложно объяснить на пальцах? - давай данные и рисуй вывод, который из этих данных должен получиться.
...
Рейтинг: 0 / 0
24.01.2018, 10:42
    #39589759
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Добрый Э - Эх,

согласен :)

Код: 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.
DECLARE @a TABLE 
(
	[111] VARCHAR(5),
	[222] VARCHAR(5),
	[333] VARCHAR(5)
)

INSERT INTO @a VALUES
(NULL,NULL,'LLL'),
('AAAA',NULL,NULL),
(NULL,'BBB','CCC'),
('XXXX',NULL,'NNN'),
('DDDD',NULL,NULL),
(NULL,NULL,'III')


;WITH a as 
(
	SELECT 
		[r] = ROW_NUMBER() OVER (ORDER BY 1/0),
		[a] = [111] 
	FROM @a
	WHERE [111] IS NOT NULL
), b as 
(
	SELECT 
			[r] = ROW_NUMBER() OVER (ORDER BY 1/0),
			[a] = [222] 
	FROM @a
	WHERE [222] IS NOT NULL
), c as
(
	SELECT 
		[r] = ROW_NUMBER() OVER (ORDER BY 1/0),
		[a] = [333] 
	FROM @a
	WHERE [333] IS NOT NULL
)
SELECT 
	a.a,
	b.a,
	c.a
FROM a
FULL JOIN b
ON
	a.r = b.r
FULL JOIN c
ON
	c.r = a.r
...
Рейтинг: 0 / 0
24.01.2018, 11:02
    #39589784
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
TaPaK,

Спасибо!
...
Рейтинг: 0 / 0
24.01.2018, 11:47
    #39589838
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Мой вариант "с сохранением структуры":
Код: 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.
DECLARE @a TABLE 
(
	[111] VARCHAR(5),
	[222] VARCHAR(5),
	[333] VARCHAR(5)
)

INSERT INTO @a VALUES
('AAAA',NULL,NULL),
(NULL,NULL,'FFF'),
(NULL,'EEE',NULL),
(NULL,'BBB',NULL),
(NULL,NULL,'CCC'),
(NULL,NULL,'LLL'),
('XXXX',NULL,NULL),
('ZZZZ',NULL,NULL),
(NULL,NULL,'NNN'),
('DDDD',NULL,NULL),
(NULL,NULL,'III');



with 
A as 
(Select *,row_number() over (Order by (select 1)) as rn From @a ),
B as
(Select *,count([111]) over (Order by rn) as ID_111 From A),
C as
(Select *,
        count([222]) over (partition by ID_111 Order by rn) as ID_222,
	max([111]) over (partition by ID_111)  as [_111]
	From B),
D as
(Select *,
        count([333]) over (partition by ID_111,ID_222 Order by rn) as ID_333,
	max([222]) over (partition by ID_111,ID_222)  as [_222]
	From C),
E as
(Select *,
        max([333]) over (partition by ID_111,ID_222,ID_333)  as [_333],
	max(ID_222) over (partition by ID_111) as Count_222,
	max(ID_333) over (partition by ID_111,ID_222) as Count_333
	From D)
Select [_111],[_222],[_333] From E
Where not(Count_222>0 and ID_222 = 0) 
   and not(Count_333>0 and ID_333 = 0) 


Результат:
_111_222_333AAAAEEE<NULL>AAAABBBCCCAAAABBBLLLXXXX<NULL><NULL>ZZZZ<NULL>NNNDDDD<NULL>III
...
Рейтинг: 0 / 0
24.01.2018, 11:55
    #39589850
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
TaPaK,
Если значений в столбце "B" больше, чем в "A", то результат будет некорректный. Правильнее:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
	a.a,
	b.a,
	c.a
FROM a
FULL JOIN b
ON
	a.r = b.r
FULL JOIN c
ON
-----Исправление:
	c.r = isnull(a.r,b.r)
...
Рейтинг: 0 / 0
24.01.2018, 12:09
    #39589865
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
Kopelly,

И что же неправильного, у нас Full Join, а значит будет в A будет Null, а в B знач.
А ваш запрос из разряда как простые вещи сделать сложными :)
...
Рейтинг: 0 / 0
24.01.2018, 12:13
    #39589871
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
В моем варианте неправильное условие. правильнее так:
Код: sql
1.
2.
3.
From E
Where not(Count_222>0 and ID_222 = 0 and Count_333=0) 
   and not(Count_333>0 and ID_333 = 0)
...
Рейтинг: 0 / 0
24.01.2018, 12:14
    #39589874
Группировка без null
aleksrov,

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

З.Ы.
я на полном серьезе, без сарказма...
...
Рейтинг: 0 / 0
24.01.2018, 12:16
    #39589876
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка без null
aleksrov,
При
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
INSERT INTO @a VALUES
(NULL,NULL,'LLL'),
('AAAA',NULL,NULL),
(NULL,'BBB','CCC'),
('XXXX',NULL,'NNN'),
('DDDD',NULL,NULL),
(NULL,NULL,'III'),
(NULL,'QQQ',NULL),
(NULL,'WWW',NULL),
(NULL,'EEE',NULL),
(NULL,'RRR',NULL)


получаем:
aaaAAAABBBLLLXXXXQQQCCCDDDDWWWNNN<NULL>EEE<NULL><NULL>RRR<NULL><NULL><NULL>III

А не:
aaaAAAABBBLLLXXXXQQQCCCDDDDWWWNNN<NULL>EEEIII<NULL>RRR<NULL>
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка без null / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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