Это база данных тезауруса под управлением SQL Server 2008, где термины и категории связаны друг с другом.Иерархические данные.Просто три таблицы:
CREATE TABLE term (
termid INT NOT NULL PRIMARY KEY,
en VARCHAR(95) NOT NULL,
enscope VARCHAR(640),
dscr BIT NOT NULL
)
CREATE TABLE link (
id INT NOT NULL IDENTITY PRIMARY KEY,
termid INT NOT NULL FOREIGN KEY REFERENCES term(termid),
reltype CHAR(3) NOT NULL,
refid INT NOT NULL FOREIGN KEY REFERENCES term(termid)
)
CREATE TABLE categorylink (
id INT NOT NULL IDENTITY PRIMARY KEY,
code CHAR(5) NOT NULL,
termid INT NOT NULL FOREIGN KEY REFERENCES term(termid)
)
Теперь извлеките некоторые дескрипторы (термины со ссылками) по кодам категорий:
SELECT Term = term.en,
[Scope note] = CHAR(9) + 'SN ' + term.enscope,
[Ref. terms] = CHAR(9) + link.reltype + CHAR(32) + term1.en,
Categories = CHAR(9) + 'CODE ' + categorylink.code
FROM link
LEFT JOIN term ON term.termid = link.termid
LEFT JOIN term AS term1 ON term1.termid = link.refid
LEFT JOIN categorylink ON categorylink.termid = term.termid
WHERE term.termid IN (SELECT termid FROM categorylink WHERE code IN ('S07', 'S08'))
GROUP BY term.en, term1.en, link.id, link.reltype, term.enscope, categorylink.code
ORDER BY term.en, link.id
Результат довольно беспорядочный:
Term Scope note Ref. terms Categories
ACPR REACTOR SN New M... UF acrr reactor CODE S07
ACPR REACTOR SN New M... UF annular core pulse reactor CODE S07
ACPR REACTOR SN New M... BT ENRICHED URANIUM REACTORS CODE S07
ACPR REACTOR SN New M... BT HYDRIDE MODERATED REACTORS CODE S07
ACPR REACTOR SN New M... BT MIXED SPECTRUM REACTORS CODE S07
ACPR REACTOR SN New M... BT PULSED REACTORS CODE S07
ACPR REACTOR SN New M... BT RESEARCH REACTORS CODE S07
ACPR REACTOR SN New M... BT SOLID HOMOGENEOUS REACTORS CODE S07
ACPR REACTOR SN New M... BT WATER COOLED REACTORS CODE S07
ACPR REACTOR SN New M... BT WATER MODERATED REACTORS CODE S07
ACTINIUM 225 NULL BT ACTINIDE NUCLEI CODE C6400
ACTINIUM 225 NULL BT ACTINIDE NUCLEI CODE S07
ACTINIUM 225 NULL BT ACTINIDE NUCLEI CODE S62
etc, etc ...
Я хочу, чтобы это выглядело так в одном столбце вывода:
ACPR REACTOR
SN New Mexico, USA. Shut down in 1977
UF acrr reactor
UF annular core pulse reactor
BT ENRICHED URANIUM REACTORS
BT HYDRIDE MODERATED REACTORS
BT MIXED SPECTRUM REACTORS
BT PULSED REACTORS
BT RESEARCH REACTORS
BT SOLID HOMOGENEOUS REACTORS
BT WATER COOLED REACTORS
BT WATER MODERATED REACTORS
CODE S07
ACTINIUM 225
BT ACTINIDE NUCLEI
CODE C6400
CODE S07
CODE S62
Кажется, UNPIVOT не подходит.Может быть, CTE + COALESCE?
Есть ли способ преобразовать строки в один столбец в соответствии с шаблоном:
term.en
<tab> SN term.enscope <if NOT NULL>
<tab> link.reltype term.en
...
<tab> CODE category.code