Как выбрать данные из двух таблиц sql со специальной разметкой полей - PullRequest
0 голосов
/ 11 октября 2019

У меня есть две таблицы, как показано в примере. Теперь я хочу выбрать данные в формате, представленном в строках комментариев ниже.

create table cust (nbr varchar(8))
create table data (nbr varchar(8),fld varchar(8),val varchar(8))

insert into cust (nbr) values ('AA')
insert into data (nbr,fld,val) values ('AA','1','one')
insert into data (nbr,fld,val) values ('AA','2','two')
insert into data (nbr,fld,val) values ('AA','3','three')
insert into data (nbr,fld,val) values ('AA','1','uno')
insert into data (nbr,fld,val) values ('AA','2','dos')
insert into data (nbr,fld,val) values ('AA','3','tres')

select * from cust
select * from data

drop table cust
drop table data

-- AA, One, Two, Three
-- AA, Uno, Dos, Tres

Любые идеи, как объединить эти таблицы, чтобы получить желаемый результат.

1 Ответ

0 голосов
/ 11 октября 2019

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

create table cust (nbr varchar(8))
create table data (nbr varchar(8),fld varchar(8),val varchar(8), languageID int)

insert into cust (nbr) values ('AA')
insert into data (nbr,fld,val, languageID) values ('AA','1','one', 1)
insert into data (nbr,fld,val, languageID) values ('AA','2','two', 1)
insert into data (nbr,fld,val, languageID) values ('AA','3','three', 1)
insert into data (nbr,fld,val, languageID) values ('AA','1','uno', 2)
insert into data (nbr,fld,val, languageID) values ('AA','2','dos', 2)
insert into data (nbr,fld,val, languageID) values ('AA','3','tres', 2);

select * from cust;
select * from data;


with data_cte(nbr, languageID)
as
(
    select nbr, languageID
    from data with (nolock)
    group by nbr, languageID
)
select c.nbr,
    SUBSTRING(
        (
            SELECT ','+d.val AS [text()]
            FROM [data] d
            WHERE d.nbr = dc.nbr and d.languageID = dc.languageID
            ORDER BY d.fld
            FOR XML PATH ('')
        ), 2, 1000) as 'Values'
from data_cte dc
inner join cust c on c.nbr = dc.nbr;

drop table cust
drop table data

SQL для объединения строк был взят из этого поста Как объединитьтекст из нескольких строк в одну текстовую строку на сервере SQL? , с небольшим изменением для добавления с.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...