Использовать значение из одного запроса SQL в качестве имени столбца в другом запросе SQL

Я ищу способ отображать значения одного запроса SQL как имена столбцов в другом операторе SQL. Я вижу в Интернете множество примеров использования сводной или перекрестной таблицы. Я попробовал оба варианта, но так и не смог найти выход. Если кто-нибудь может дать мне подсказку в правильном направлении следующим образом:

Как видите, я хочу добавить в заголовок «Kledingmaat» вместо usr1 и так далее.

Дополнительная информация: у меня есть таблица personen, в этой таблице 10 столбцов USR1, USR2, USR3, USR4, USR5, USR6, USR7, USR8, USR9, USR10. Затем у меня есть таблица uservelden со следующими столбцами:

VOLGNR, USERTABELNAAM, CAPTIONSTRING

Как я могу достичь следующего результата:

Мой SQL:

WITH ColumnNames AS 
(
    SELECT TOP 10 CAPTIONSTRING, VOLGNR
    FROM USERVELDEN
    WHERE (USERVELDNAAM LIKE 'USR[1-9]' OR USERVELDNAAM LIKE 'USR[1-9][0-9]')
      AND ACCOUNT_ID = 258
      AND USERTABELNAAM = 'PERSONEN'
    ORDER BY VOLGNR
)
SELECT
    MAX(CASE WHEN ColumnNames.VOLGNR = 1 THEN usr1 END) AS 'Kledingmaat',
    MAX(CASE WHEN ColumnNames.VOLGNR = 2 THEN usr2 END) AS 'Kledingmaat anders',
    MAX(CASE WHEN ColumnNames.VOLGNR = 3 THEN usr3 END) AS 'Dieetwensen',
    MAX(CASE WHEN ColumnNames.VOLGNR = 4 THEN usr4 END) AS 'Shoe size',
    MAX(CASE WHEN ColumnNames.VOLGNR = 5 THEN usr5 END) AS 'Fifth',
    MAX(CASE WHEN ColumnNames.VOLGNR = 6 THEN usr6 END) AS 'Sixth',
    MAX(CASE WHEN ColumnNames.VOLGNR = 7 THEN usr7 END) AS 'Seventh',
    MAX(CASE WHEN ColumnNames.VOLGNR = 8 THEN usr8 END) AS 'Eighth',
    MAX(CASE WHEN ColumnNames.VOLGNR = 9 THEN usr9 END) AS 'Ninth',
    MAX(CASE WHEN ColumnNames.VOLGNR = 10 THEN usr10 END) AS 'Tenth'
FROM 
    PERSONEN
CROSS JOIN 
    ColumnNames
WHERE 
    ACCOUNT_ID = 258
    AND INACTIEF = 'F';

Где твой код! что ты уже испробовал? Stack Overflow не является бесплатным сервисом для написания кода. Предполагается, что вы попытаетесь написать код самостоятельно. После дополнительных исследований если у вас возникла проблема, вы можете опубликовать то, что вы пробовали, с четким объяснением того, что не работает, и предоставить Минимальный, полный и проверяемый пример

Roman Marusyk 08.07.2024 15:37

Изучите создание псевдонимов столбцов с помощью динамического SQL через STUFF.

Bart McEndree 08.07.2024 15:41

Ваш вопрос неясен - как связаны эти поля, таблицы? Действительно, прямой ответ на ваш вопрос: select usr1 as Kledingmaat, usr2 as "Kledingmaat anders", usr3 as Dieetwensen, usr4 as "Shoe size" from MyTable — это все, что вам нужно? Если вы имеете в виду, что вам нужно получить заголовки этих столбцов из другой таблицы, то вам, вероятно, понадобится так называемый «динамический SQL» (и, кстати, вероятно, даже начинать идти по этому пути — плохая идея — вы не эффективно моделируете данные с помощью этого подход).

topsail 08.07.2024 15:42

Да, @topsail, спасибо, что хотя бы попытался мне помочь. Они связаны через account_id = 258 и USERTABELNAAM = 'REL_PERSOON'.

Wanthelp 08.07.2024 15:45

Почему вы делитесь таблицей с такими заголовками, как usr1, usr2 и т. д., когда в вашей выборке данных/исходной таблице указаны размеры одежды и тому подобное? Это очень запутанный вопрос. Пожалуйста, поделитесь примерными данными и желаемыми результатами этих выборочных данных, чтобы мы могли лучше понять. Также уточните, известны ли вам значения Kledingmaat, если вы хотите, чтобы сервер динамически определял результаты на основе данных в таблице (так называемый «динамический свод»). Наконец, отредактируйте теги используемой вами СУБД (mysql, postgres, sql-сервер и т. д.).

JNevill 08.07.2024 15:45

Usr1, usr2 — это значения, которые необходимо отобразить. Таким образом, usr1 должен отображаться как значение под «kledingmaat». usr2 должен быть показан для «Kledingmaat anders». и поэтому у меня есть 10 пользовательских полей, которые можно заполнить данными. Но на данный момент у меня есть только 4 пользовательских поля, которые фактически заполнены данными. @ДжейНевилл

Wanthelp 08.07.2024 15:51

это пользовательские поля, они предназначены для того, чтобы пользователь мог определить собственное поле. Так что это не «пользователь» @topsail. Извините за плохой английский и недопонимание

Wanthelp 08.07.2024 15:53

возможно, эта рабочий пример поможет нам совместно найти решение dbfiddle.uk/Hy3hlA34

Bart McEndree 08.07.2024 15:54

@BartMcEndree Я только что добавил свой SQL-запрос. Я не знаком со скрипкой. Но я постараюсь изо всех сил

Wanthelp 08.07.2024 16:01

@topsail Да, именно так

Wanthelp 08.07.2024 16:01

Пожалуйста, не используйте изображения для данных — используйте уценку таблицы.

Dale K 08.07.2024 21:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
11
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используете идеи из динамического запроса PIVOT SQL Server? Мне удалось создать это решение для динамических столбцов SQL-Server.

Это должно создать @cols = 'usr1 как [Kledinmaat], usr2 как [Kledinmaat anders], usr3 как [Dieetwensen], usr4 как [Размер обуви]'

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',usr' + CAST(Row_Number() OVER (ORDER BY (SELECT NULL))  as Varchar(3)) + ' as '+ QUOTENAME(c.CAPTIONSTRING) 
            FROM uservelden c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

SELECT @cols

set @query = 'SELECT ' +  @cols + ' FROM personen '

execute(@query)

рабочий пример

Клединмаат Клединмаат Андерс Дитвензен Размер обуви нулевой нулевой нулевой нулевой нулевой ХХХ... нулевой нулевой нулевой нулевой нулевой нулевой нулевой ХА... нулевой нулевой нулевой нулевой нулевой нулевой 708 нулевой нулевой нулевой 708 нулевой нулевой нулевой нулевой нулевой нулевой нулевой 710 нулевой нулевой нулевой нулевой XS нулевой нулевой 708 нулевой нулевой нулевой 708 нулевой нулевой нулевой

Круто, но мне это нужно как один SQL-запрос, который я затем могу использовать в своем XML-файле. Но именно так работает приложение. Я добавил свой текущий sql в приведенный выше пример. Теперь у меня статический sql, он должен быть динамическим

Wanthelp 08.07.2024 16:17

Другие вопросы по теме