Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 5

Как перевести строки в в столбцы?

14.10.2022, 22:21. Показов 3185. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть выбранные строки:

shop user subject depatrment value
PCShop Ivan B Konstantin M Administrator 7317
PCShop Ivan B Ivan B Employee 813
PCShop Ivan B Dmitriy N Consultant 1290
BK GLOBUS Ruslana K Alex F Administrator 1899
BK GLOBUS Ruslana K Ruslana K Employee 21
BK GLOBUS Ruslana K Victor E Consultan 390

Необходимо вывести результат в таком виде

shop user Administrator admin_value Employee emp_value Consultant consul_value
PCShop Ivan B Konstantin M 7317 Ivan B 813 Dmitriy N 1290
BK GLOBUS Ruslana K Alex F 1899 Ruslana K 21 Victor E 390



Как это сделать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2022, 22:21
Ответы с готовыми решениями:

Как перевести строки в столбцы?
Помогите пожалуйста, оч срочно. Есть выборка: DECLARE @t TABLE (name nvarchar(MAX)); INSERT INTO @t VALUES ('Col1') ...

Перевести строки в столбцы
Добрый день! Подскажите пожалуйста, добрые форумчане, как строки в столбцы перевести? К примеру если сверстать такую табличку, ...

Функции: если в матрице есть строки/столбцы, состоящие из нулей, то обнулить столбцы/строки с такими же номерами
Дана квадратная целочисленная матрица С. Если в ней есть строки, состоящие из нулей, то обнулить столбцы с такими же номерами. Если есть...

8
106 / 67 / 29
Регистрация: 22.04.2022
Сообщений: 231
15.10.2022, 05:52
Вам сюда
0
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 5
15.10.2022, 11:36  [ТС]
Нужна пояснительная бригада, я выполнил запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT * FROM crosstab
(
  'SELECT shop, user, depatrment, subject
    FROM   my_table
    ORDER  BY 1, 2, 3',
  'SELECT DISTINCT description  FROM my_table ORDER BY 1'
)
AS
(
       shop text,
       USER text,
       subject text,
       "Administrator" VARCHAR,
      Employee VARCHAR,
      "Consultant" text);
как мне добавить value для каждого отдела?
0
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 5
15.10.2022, 22:20  [ТС]
fte65, можете подсказать?
0
106 / 67 / 29
Регистрация: 22.04.2022
Сообщений: 231
16.10.2022, 08:28
Лучший ответ Сообщение было отмечено good32 как решение

Решение

Для начала, у Вас ошибка в последней строке таблицы "Consultan" вместо "Consultant" - а это даёт лишнюю колонку!

Добавить нужные колонки можно так:
SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT shop,"user","Administrator","admim_value","Employee","emp_value","Consultant","consul_value"
FROM 
    crosstab(
        'SELECT shop, "user", department, subject FROM my_table ORDER  BY 1, 3, 2',
        'SELECT DISTINCT department  FROM my_table ORDER BY 1'
    ) r0 (shop text,"user" text,"Administrator" text,"Employee" text,"Consultant" text)
    LEFT JOIN crosstab(
        'SELECT shop, "user", department, "value" FROM my_table ORDER  BY 1, 3, 2',
         'SELECT DISTINCT department  FROM my_table ORDER BY 1'
    ) r1 (shop text,"user" text,"admim_value" INTEGER,"emp_value" INTEGER,"consul_value" INTEGER)
    USING(shop,"user")
Добавлено через 17 минут
Впрочем, если у Вас всего три департамента, то можно сделать и так:
SQL
1
2
3
4
5
6
7
8
SELECT  r.shop,r."user",
        admin.subject "Administrator", admin."value" admin_value,
        empl.subject "Employee",empl."value" "emp_value",
        consul.subject "Consultant",consul."value" "consul_value"
FROM    (SELECT DISTINCT shop,"user" FROM my_table ) r
        LEFT JOIN my_table admin ON (r."user" = admin."user" AND r.shop=admin.shop AND admin.department='Administrator')
        LEFT JOIN my_table empl ON (r."user" = empl."user" AND r.shop=empl.shop AND empl.department='Employee')
        LEFT JOIN my_table consul ON (r."user" = consul."user" AND r.shop=consul.shop AND consul.department='Consultant')
Добавлено через 16 минут
Строго говоря, первый запрос должен быть таким:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT shop,"user","Administrator","admim_value","Employee","emp_value","Consultant","consul_value"
FROM 
    crosstab(
         'SELECT shop, "user", department, subject FROM my_table 
         WHERE department in (''Administator'',''Employee'',''Consultant'')
         ORDER  BY 1, 3, 2',
        'values (''Administator''),(''Employee''),(''Consultant'')'
    ) r0 (shop text,"user" text,"Administrator" text,"Employee" text,"Consultant" text)
    LEFT JOIN crosstab(
         'SELECT shop, "user", department, "value" FROM my_table 
         WHERE department in (''Administator'',''Employee'',''Consultant'')
         ORDER  BY 1, 3, 2',
        'values (''Administator''),(''Employee''),(''Consultant'')'
    ) r1 (shop text,"user" text,"admim_value" INTEGER,"emp_value" INTEGER,"consul_value" INTEGER)
    USING(shop,"user")
потому-что, если у Вас больше трёх департаментов первый запрос выдаст ошибку...
0
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 5
16.10.2022, 22:55  [ТС]
Благодарю

Добавлено через 4 часа 46 минут
fte65, я попробовал выполнить, выводит только один магазин и одного сотрудника. Видима надо было в примере уточнить что сотрудников может быть больше 1-го.
Нужно чтобы группировка была по 3 полям: shop, user, employee. Пробывал самостоятельно изменить, но видимо, мне без Вашего опыта не обойтись.
0
106 / 67 / 29
Регистрация: 22.04.2022
Сообщений: 231
17.10.2022, 07:05
Покажите, что получается и как должно быть....
0
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 5
17.10.2022, 10:55  [ТС]
fte65,  из этих данных 

idshopsersubjectdepartmentvalue
------------------
10BK GLOBUSDenis FAlex FAdministrator1899
11BK GLOBUSDenis FDenis FEmployee21
12BK GLOBUSDenis FVictor EConsultant390
4BK GLOBUSRuslana KAlex FAdministrator1899
5BK GLOBUSRuslana KRuslana KEmployee21
6 BK GLOBUS Ruslana K Victor E Consultant 390
3 PCShop Ivan B Dmitriy N Consultant 1290
2 PCShop Ivan B Ivan B Employee 813
1 PCShop Ivan B Konstantin M Administrator 7317
9 PCShop Yulia K Dmitriy N Consultant 1290
7 PCShop Yulia K Konstantin M Administrator 7317
8 PCShop Yulia K Yulia K Employee 813

я получаю подобный результат

shopuserAdministratoradmim\_valueEmployeeemp\_valueConsultantconsultant\_value  
------------------------ 
BK GLOBUS Denis F Alex F 1899 Ruslana K 21 Victor E 390  
PCShop Ivan B Konstantin M 7317 Yulia K 813 Dmitriy N 1290 

Должно быть так:

shopuserAdministratoradmim_valueEmployeeemp_valueConsultantconsultant_value
------------------------
BK GLOBUS Denis F Alex F 1899 Denis F 21 Victor E 390
BK GLOBUS Ruslana K Alex F 1899 Ruslana K 21 Victor E 390
PCShop Yulia K Konstantin M 7317 Yulia K 813 Dmitriy N 1290
PCShop Ivan B Konstantin M 7317 Ivan B 813 Dmitriy N 1290
0
106 / 67 / 29
Регистрация: 22.04.2022
Сообщений: 231
18.10.2022, 07:14
Цитата Сообщение от good32 Посмотреть сообщение
fte65, я попробовал выполнить, выводит только один магазин и одного сотрудника. Видима надо было в примере уточнить что сотрудников может быть больше 1-го.
Нужно чтобы группировка была по 3 полям: shop, user, employee. Пробывал самостоятельно изменить, но видимо, мне без Вашего опыта не обойтись.
Плохо пробывали, как говорится найдите 3 отличия:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT shop,"user","Administrator","admim_value","Employee","emp_value","Consultant","consul_value"
FROM 
    crosstab(
         'SELECT shop, "user", department, subject FROM my_table 
         WHERE department in (''Administrator'',''Employee'',''Consultant'')
         ORDER  BY 2, 1, 3',
        'values (''Administrator''),(''Employee''),(''Consultant'')'
    ) r0 (shop text,"user" text,"Administrator" text,"Employee" text,"Consultant" text)
    LEFT JOIN crosstab(
         'SELECT shop, "user", department, "value" FROM my_table 
         WHERE department in (''Administrator'',''Employee'',''Consultant'')
         ORDER  BY  2, 1, 3',
        'values (''Administrator''),(''Employee''),(''Consultant'')'
    ) r1 (shop text,"user" text,"admim_value" INTEGER,"emp_value" INTEGER,"consul_value" INTEGER)
    USING(shop,"user")
ORDER BY 1,2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2022, 07:14
Помогаю со студенческими работами здесь

столбцы в строки в отчете , как?
Добрый день ! В пнроцессе создания рассписания занятий на неделю или на месяц уперся в отсутствие нужных знаний в access (находил примеры...

Как строки превратить в столбцы?
Есть таблица, например: 1,й 1,ф 1,я 2,к 2,а 2,в Надо получить следующее: 1,й,ф,я

Как транспонировать таблицу? Столбцы в строки
Добрый день, Подскажите как транспонировать таблицу (во вложении), т.е. нужно, чтобы столбцы отображались строками. Есть столбцы от...

Как объединить строки и столбцы в Таблицах?
Добрый. Не подскажите случайно как объединить столбы? Пример по фото. Имеются 8 столбцов. A-H В итог попадает сначала А2-D2,следующей...

Как добавить строки и столбцы в tableLayoutPanel
Здравствуйте! Возникла небольшая проблемка: мне нужно программно добавить строки и столбцы в tableLayoutPanel и добавить в ячейки кнопки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru