powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка по одному полю
15 сообщений из 15, страница 1 из 1
Группировка по одному полю
    #39573382
sirus_christus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть результат выборки в таком виде:

Описание Значение Дата А 503.8 2017-12-20 08 Б 0 2017-12-20 08 С 3 2017-12-20 08 А 717.4 2017-12-20 09 Б 0 2017-12-20 09 С 9.3 2017-12-20 09 А 1281.9 2017-12-20 10 Б 0 2017-12-20 10 С 29.6 2017-12-20 10 А 1058.4 2017-12-20 11 Б 0 2017-12-20 11 С 15.9 2017-12-20 11
Вопрос - Можно ли сделать выборку из этой, с группировкой по времени и в результате такое:

Дата Описание Значение Описание Значение Описание Значение2017-12-20 08 А 503.8 Б 0 С 3 2017-12-20 09 A 717.4 Б 0 С 9.3
и так для каждой даты

Спасибо за любые советы!
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573393
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sirus_christus,
может тебе на самом деле нужно вот так?
ДатаАБС2017-12-20 08503.8032017-12-20 09717.409.3
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573406
sirus_christus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович, да , пожалуй тупанул я. Вы абсолютно правы

Дата А Б С2017-12-20 08 503.8 0 32017-12-20 09 717.4 0 9.3

именно то, что нужно
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573412
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамировичможет тебе на самом деле нужно вот так?

Оба варианта делаются через PIVOT.
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573415
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2008+: PIVOT
Код: 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.
DECLARE @tbl TABLE (
  [text] VARCHAR(1),
  [value] MONEY,
  [stamp] VARCHAR(15) )
INSERT INTO @tbl
VALUES
( 'А',	503.8,	'2017-12-20 08' ),
( 'Б',	0,		'2017-12-20 08' ),
( 'С',	3,		'2017-12-20 08' ),
( 'А',	717.4,	'2017-12-20 09' ),
( 'Б',	0,		'2017-12-20 09' ),
( 'С',	9.3,		'2017-12-20 09' ),
( 'А',	1281.9,	'2017-12-20 10' ),
( 'Б',	0,		'2017-12-20 10' ),
( 'С',	29.6,		'2017-12-20 10' ),
( 'А',	1058.4,	'2017-12-20 11' ),
( 'Б',	0,		'2017-12-20 11' ),
( 'С',	15.9,		'2017-12-20 11' )
;
SELECT
  *
FROM
  @tbl t
  PIVOT (
    SUM( [value] )
    FOR [text] IN ( [А], [Б], [С] )
  ) pvt
;
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573432
sirus_christus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович, спасибо работает!

Но что если описания А, Б, С динамически меняются в предыдущей выбоке и я явно не знаю их?
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573434
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sirus_christusРуслан Дамирович, спасибо работает!

Но что если описания А, Б, С динамически меняются в предыдущей выбоке и я явно не знаю их?
тогда динамически и скрипт собирать.
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573442
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sirus_christusНо что если описания А, Б, С динамически меняются в предыдущей выбоке и я явно не знаю их?

Тогда так:

Код: 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.
IF OBJECT_ID('tempdb..#my_list') IS NOT NULL DROP TABLE #my_list
CREATE TABLE #my_list (
  [Описание]  nvarchar(30),
  [Значение]  decimal(24,2),
  [Дата]      nvarchar(30),
)
CREATE INDEX temp_my_idx ON #my_list ([Описание], [Дата])

INSERT #my_list ([Описание], [Значение], [Дата])
VALUES
( 'А',	503.8,	'2017-12-20 08' ),
( 'Б',	0,		'2017-12-20 08' ),
( 'С',	3,		'2017-12-20 08' ),
( 'А',	717.4,	'2017-12-20 09' ),
( 'Б',	0,		'2017-12-20 09' ),
( 'С',	9.3,	'2017-12-20 09' ),
( 'А',	1281.9,	'2017-12-20 10' ),
( 'Б',	0,		'2017-12-20 10' ),
( 'С',	29.6,	'2017-12-20 10' ),
( 'А',	1058.4,	'2017-12-20 11' ),
( 'Б',	0,		'2017-12-20 11' ),
( 'С',	15.9,	'2017-12-20 11' )

DECLARE
  @column_list nvarchar(max),
  @sql_str nvarchar(max)

SELECT @column_list=COALESCE(@column_list+',['+[Описание]+']', '['+[Описание]+']')
FROM #my_list GROUP BY [Описание] ORDER BY [Описание]

SELECT @sql_str='SELECT * FROM #my_list PIVOT ( SUM([Значение] ) FOR [Описание] IN ('+
  @column_list+') ) P'

EXEC (@sql_str)
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573452
sirus_christus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minamoto, понял! Спасибо!
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573453
sirus_christus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ptr128, Спасибо огромное
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573460
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QUOTENAME? не, не слышали...
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573539
Руслан ДамировичQUOTENAME? не, не слышали...есть мнение, что некоторые стараются сильно экономят на символах, сокращая длину своего кода.... в параллельной ветке форума люди даже письками мерились, у кого код будет короче...
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39573582
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичQUOTENAME? не, не слышали...
Мне быстрее было выдрать подобный кусок из давно имеющеегося кода, чем еще и переделывать его. Разве это хоть как-то влияет на производительность запроса?
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39574264
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхРуслан ДамировичQUOTENAME? не, не слышали...есть мнение, что некоторые стараются сильно экономят на символах, сокращая длину своего кода.... в параллельной ветке форума люди даже письками мерились, у кого код будет короче...
Ну, для таких любителей есть brainf$ck.
Я фанатик понятности кода - потому что через 2-3-6-12 месяцев даже программист с памятью как у слона забудет, что там делает/считает код.

QUOTENAME здесь нужен не для красоты, а по конкретной причине - чтобы служебные символы в значениях не сломали работающий скрипт. Использовать динамический код - моветон; думать, что никто не добавит служебных символов - самонадеянно; а уж учить новичков НЕ использовать то, что нужно - за это вообще не эшафот нужно отправлять.
...
Рейтинг: 0 / 0
Группировка по одному полю
    #39574270
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичQUOTENAME здесь нужен не для красоты, а по конкретной причине - чтобы служебные символы в значениях не сломали работающий скрипт.Это касается только квадратных скобок.
Глупо просто добавлять их справа и слева к имени.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка по одному полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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