powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / PIVOT/UNPIVOT несколько значений из столбца в одну строку
18 сообщений из 18, страница 1 из 1
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770420
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! На форумах есть темы с подобным вопросом, где нужно значения из столбца поместить в одну строку в соответствии с каким-то условием. Но мне нужно сделать это через PIVOT/UNPIVOT.

для каждого empid поместить все его company в одну строку

Например:
как есть
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770421
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как должно быть
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770426
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KotovachНо мне нужно сделать это через PIVOT/UNPIVOT.В общем случае это невозможно.
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770432
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KotovachНо мне нужно сделать это через PIVOT/UNPIVOT.Только если напишите соответсвующую агрегатную функцию ( https://docs.microsoft.com/ru-ru/sql/relational-databases/user-defined-functions/create-user-defined-aggregates?view=sql-server-2017) с IsInvariantToNulls = true
Со штатной string_agg не взлетит.
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770435
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, спасибо за наводку, но такой функционал доступен с 2016 server. В моем случае лицензия на 2012.
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770445
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, все больше думаю, что Вы правы)
написала решение общее
USE tempdb
IF OBJECT_ID('dbo.CONsum', 'P') IS NOT NULL
DROP PROC dbo.CONsum;
GO

CREATE FUNCTION dbo.CONsum(@id INTEGER)
RETURNS NVARCHAR(1000)
AS
BEGIN
DECLARE @Result NVARCHAR(4000)
SET @Result = ''
SELECT @Result = @Result + companyname + ', ' FROM (SELECT companyname, empid
FROM TestSQL.Sales.Orders AS SO
,TestSQL.Sales.Customers AS SC
WHERE SO.custid=SC.custid) AS qqq
WHERE empid = @id;
RETURN '"' + RTRIM(@Result) + '"'
END
GO

но на PIVOT как указано в задании переделать не могу...
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770446
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Весь кода
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
USE tempdb
IF OBJECT_ID('dbo.CONsum', 'P') IS NOT NULL
  DROP PROC dbo.CONsum;
GO

CREATE FUNCTION dbo.CONsum(@id INTEGER)
RETURNS NVARCHAR(1000)
AS
BEGIN
DECLARE @Result NVARCHAR(4000)
SET @Result = ''
SELECT @Result = @Result + companyname + ', ' 
                      FROM (SELECT companyname, empid
FROM TestSQL.Sales.Orders AS SO
															 ,TestSQL.Sales.Customers AS SC
													WHERE SO.custid=SC.custid) AS rez1
												WHERE empid = @id;
RETURN '"' + RTRIM(@Result) + '"'
END
GO

SELECT DISTINCT empid, dbo.CONsum(empid) FROM TestSQL.Sales.Orders
GO
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770449
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не обращайте на мои ранние сообщения внимание)

Код: 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.
USE tempdb
IF OBJECT_ID('dbo.CONsum', 'F') IS NOT NULL
  DROP PROC dbo.CONsum;
GO

CREATE FUNCTION dbo.CONs(@id INTEGER)
RETURNS NVARCHAR(1000)
AS
BEGIN
DECLARE @Result NVARCHAR(4000)
SET @Result = ''
SELECT @Result = @Result + companyname + ', '
                FROM (SELECT distinct companyname, SO.empid
				FROM TestSQL.Sales.Orders AS SO
			                 ,TestSQL.Sales.Customers AS SC
						WHERE SO.custid=SC.custid
			   ) AS qqq
		WHERE empid = @id;
RETURN '"' + RTRIM(@Result) + '"'
END
GO

SELECT DISTINCT empid, dbo.CONs(empid) FROM TestSQL.Sales.Orders
GO
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770513
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kotovach,

Покажите оригинальный текст задания.
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770568
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

И задание необходимо выполнять в соответсвии с указаной темой Pivot/Unpivot/DynamicSQL

Show the list of distinct customers who placed orders with each employee. Create two queries one for SQL Server 2017 version and another for older version of SQL Server

далее следуют изображения, раннее уже прикрепленные

Я тоже пришла к выводу, что делать через Pivot это лишнее, обсудили с наставником, пришли к согласию о предыдущем решении=)

Всем спасибо!)
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770584
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kotovachобсудили с наставником, пришли к согласию о предыдущем решении=)А ничего, что это решение к задаче "Show the list of distinct customers who placed orders with each employee" вообще никак не относится?
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770611
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kotovach,

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017

Код: sql
1.
2.
3.
4.
SELECT town, 
    STRING_AGG (email, ';') WITHIN GROUP (ORDER BY email ASC) AS emails 
FROM dbo.Employee 
GROUP BY town; 



2017 +
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770704
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KotovachЯ тоже пришла к выводу, что делать через Pivot это лишнее, обсудили с наставником, пришли к согласию о предыдущем решении=)А, а сначала препод сказал про обязательное использование pivot?
Без него то есть разные способы, например, тут в ФАКе есть несколько ваниантов, допустим, через XML
http://www.sql.ru/faq/faq_topic.aspx?fid=130
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
use tempdb
go
drop table test
go
create table dbo.TEST ([Тип] INTEGER, [Имя] NVARCHAR(100), [Количество] INTEGER)
go
INSERT dbo.TEST VALUES(1, N'Молоко', 5)
INSERT dbo.TEST VALUES(1, N'Сметана', 6)
INSERT dbo.TEST VALUES(2, N'Гвозди', 44)
INSERT dbo.TEST VALUES(3, N'Машины', 1)

select [Тип] ,( select [Имя]+': '+cast([Количество] as nvarchar)+ ',' as 'data()' from test t2 where t1.[Тип]=t2.[Тип] for xml path('') )
from dbo.TEST t1
group by [Тип]
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770740
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

А вы в курсе, что это некорректно работает при наличии спецсимволов?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
use tempdb
go
drop table test
go
create table dbo.TEST ([Тип] INTEGER, [Имя] NVARCHAR(100), [Количество] INTEGER)
go
INSERT dbo.TEST VALUES(1, N'Моло<ко', 5)
INSERT dbo.TEST VALUES(1, N'Сметана', 6)
INSERT dbo.TEST VALUES(2, N'Гвоз>ди', 44)
INSERT dbo.TEST VALUES(2, N'М<ашины', 1)

select [Тип] ,( select [Имя]+': '+cast([Количество] as nvarchar)+ ',' as 'data()' from test t2 where t1.[Тип]=t2.[Тип] for xml path('') )
from dbo.TEST t1
group by [Тип]




Код: xml
1.
2.
1	Моло&lt;ко: 5, Сметана: 6,
2	Гвоз&gt;ди: 44, М&lt;ашины: 1,
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770747
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT [Тип], STUFF((SELECT N', '+[Имя]+N': '+CAST([Количество] AS NVARCHAR) FROM dbo.TEST t2 WHERE t1.[Тип]=t2.[Тип] FOR XML PATH(''),TYPE).value('.','NVARCHAR(100)'),1,2,N'')
FROM dbo.TEST t1
GROUP BY [Тип];
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770751
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все упорно продолжают решать исходную задачу агрегированием строк
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39770809
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmИ все упорно продолжают решать исходную задачу агрегированием строк
Мда, действительно....
Как связанл это:
Kotovachдля каждого empid поместить все его company в одну строку
С этим?
KotovachShow the list of distinct customers who placed orders with each employee.
...
Рейтинг: 0 / 0
PIVOT/UNPIVOT несколько значений из столбца в одну строку
    #39771147
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

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

всем спасибо
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / PIVOT/UNPIVOT несколько значений из столбца в одну строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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