Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка по одному полю / 15 сообщений из 15, страница 1 из 1
21.12.2017, 11:42:26
    #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
21.12.2017, 11:47:39
    #39573393
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
sirus_christus,
может тебе на самом деле нужно вот так?
ДатаАБС2017-12-20 08503.8032017-12-20 09717.409.3
...
Рейтинг: 0 / 0
21.12.2017, 11:54:40
    #39573406
sirus_christus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
Руслан Дамирович, да , пожалуй тупанул я. Вы абсолютно правы

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

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

Оба варианта делаются через PIVOT.
...
Рейтинг: 0 / 0
21.12.2017, 12:01:14
    #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
21.12.2017, 12:15:28
    #39573432
sirus_christus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
Руслан Дамирович, спасибо работает!

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

Но что если описания А, Б, С динамически меняются в предыдущей выбоке и я явно не знаю их?
тогда динамически и скрипт собирать.
...
Рейтинг: 0 / 0
21.12.2017, 12:23:06
    #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
21.12.2017, 12:29:10
    #39573452
sirus_christus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
Minamoto, понял! Спасибо!
...
Рейтинг: 0 / 0
21.12.2017, 12:30:22
    #39573453
sirus_christus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
ptr128, Спасибо огромное
...
Рейтинг: 0 / 0
21.12.2017, 12:39:15
    #39573460
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
QUOTENAME? не, не слышали...
...
Рейтинг: 0 / 0
21.12.2017, 13:26:39
    #39573539
Группировка по одному полю
Руслан ДамировичQUOTENAME? не, не слышали...есть мнение, что некоторые стараются сильно экономят на символах, сокращая длину своего кода.... в параллельной ветке форума люди даже письками мерились, у кого код будет короче...
...
Рейтинг: 0 / 0
21.12.2017, 13:55:52
    #39573582
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
Руслан ДамировичQUOTENAME? не, не слышали...
Мне быстрее было выдрать подобный кусок из давно имеющеегося кода, чем еще и переделывать его. Разве это хоть как-то влияет на производительность запроса?
...
Рейтинг: 0 / 0
22.12.2017, 10:27:00
    #39574264
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка по одному полю
Добрый Э - ЭхРуслан ДамировичQUOTENAME? не, не слышали...есть мнение, что некоторые стараются сильно экономят на символах, сокращая длину своего кода.... в параллельной ветке форума люди даже письками мерились, у кого код будет короче...
Ну, для таких любителей есть brainf$ck.
Я фанатик понятности кода - потому что через 2-3-6-12 месяцев даже программист с памятью как у слона забудет, что там делает/считает код.

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


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