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

Откуда: Moscow
Сообщений: 25
Добрый день!
Как отобрать из таблицы Товар по Характеристике, выбрав первую и последнюю даты по этой Характеристике и написать в одну строку.
Все данные в одной строке должны быть связаны относительно конкретной Характеристики.
Во вложении пример как есть и как должно стать.
Помогите пожалуйста написать запрос для MS SQL Server 2016
24 дек 18, 14:02    [21772067]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
KIBER
Member

Откуда: Moscow
Сообщений: 25
Файл не прикрепился, повторно вложил.

К сообщению приложен файл (Пример выборки.xlsx - 12Kb) cкачать
24 дек 18, 14:03    [21772070]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
KIBER
Member

Откуда: Moscow
Сообщений: 25
Забыл приложить запрос.
Я добился того, что разными запросами могу вытащить нужные мне данные, но как мне объединить их в одну строчку по Характеристике?

SELECT * FROM Table_1 AS a WHERE Период = (SELECT MIN(Период) FROM Table_1 AS b WHERE a.Характеристика = b.Характеристика) ORDER BY a.Характеристика
SELECT * FROM Table_1 AS a WHERE Период = (SELECT MAX(Период) FROM Table_1 AS b WHERE a.Характеристика = b.Характеристика) ORDER BY a.Характеристика
24 дек 18, 14:44    [21772151]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3060
KIBER
Забыл приложить запрос.
Я добился того, что разными запросами могу вытащить нужные мне данные, но как мне объединить их в одну строчку по Характеристике?

SELECT * FROM Table_1 AS a WHERE Период = (SELECT MIN(Период) FROM Table_1 AS b WHERE a.Характеристика = b.Характеристика) ORDER BY a.Характеристика
SELECT * FROM Table_1 AS a WHERE Период = (SELECT MAX(Период) FROM Table_1 AS b WHERE a.Характеристика = b.Характеристика) ORDER BY a.Характеристика

Ну вот если совсем просто сделать.
SELECT
a.column1
,a.column2
,a.Период
,(select top 1 b.Период from Table_1 AS b where a.Характеристика = b.Характеристика order by b.Период asc) as min_Период
,(select top 1 c.Период from Table_1 AS c where a.Характеристика = c.Характеристика order by c.Период desc) as max_Период
FROM Table_1 AS a
ORDER BY a.Характеристика
24 дек 18, 14:48    [21772155]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
KIBER
Member

Откуда: Moscow
Сообщений: 25
Andy_OLAP,
Не работает конструкция :(
Просто создает еще два поля в таблице и заполняет их максимальными и минимальными датами и выводит всю таблицу.
24 дек 18, 15:06    [21772185]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
Konst_One
Member

Откуда:
Сообщений: 11017
https://www.red-gate.com/simple-talk/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
24 дек 18, 15:10    [21772187]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
Rigersong
Member

Откуда:
Сообщений: 5
SELECT *
	, Период = MIN(Период) + ' - ' + MAX(Период)
FROM Table_1
WHERE a.Характеристика = b.Характеристика
ORDER BY a.Характеристика
2 янв 19, 15:53    [21777599]     Ответить | Цитировать Сообщить модератору
 Re: Разложить строки запросом в одну строку  [new]
andrey odegov
Member

Откуда:
Сообщений: 442
WITH
  A AS (
    SELECT
      *,
      RANK() OVER (PARTITION BY Характеристика ORDER BY Период) AS mn
      RANK() OVER (PARTITION BY Характеристика ORDER BY Период DESC) AS mx
    FROM Table_1
  )
SELECT * FROM A WHERE mn = 1 OR mx = 1;
2 янв 19, 20:51    [21777677]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить