SQL Pivot Использование трех таблиц - PullRequest
0 голосов
/ 25 сентября 2018

У меня возникают проблемы при попытке вывести некоторые данные из SQL.

У меня есть три таблицы, которые будут содержать данные.

Таблица 1: (Предложение) -Clause -ClauseName

Таблица 2: (Процесс) -Id -ProcessName

Таблица 3: (RELProcessClauses) -ProcessId -Clause -WeightedValue

В конечном счете, я хочу получить матрицуданные, которые являются Clause, ClauseName внизу слева, ProcessName вверху и взвешенное значение для соответствия между Process и Clause.

Не уверен, будет ли это иметь много смысла.

1 Ответ

0 голосов
/ 25 сентября 2018

Присоединяйтесь к трем таблицам и используйте PIVOT на нем.Вы можете выполнить следующий запрос:

SELECT * FROM (
SELECT
c.Clause, 
c.ClauseName,
p.ProcessName,
pc.WeightedValue
from RELProcessClauses pc
JOIN Clause c on pc.clause = c.clause
JOIN Process p on pc.ProcessId = p.id
) x
PIVOT (
  SUM(WeightedValue) 
  FOR ProcessName IN ([ProcessName1], [ProcessName2], [ProcessName3])
) as pvt

Таблица вывода:

+--------+-------------+--------------+--------------+--------------+
| Clause | ClauseName  | ProcessName1 | ProcessName2 | ProcessName3 |
+--------+-------------+--------------+--------------+--------------+
|      1 | ClauseName1 |           10 |           15 |           30 |
|      2 | ClauseName2 |           15 |           20 |           30 |
|      3 | ClauseName3 |           20 |           20 |           30 |
+--------+-------------+--------------+--------------+--------------+

Запрос / вывод работает с демонстрационными таблицами, созданными с использованием запроса ниже:

CREATE TABLE Clause (
 Clause int,
 ClauseName varchar(255)
);
CREATE TABLE Process (
 Id int,
 ProcessName varchar(255)
);
CREATE TABLE RELProcessClauses (
 ProcessId int,
 Clause int,
 WeightedValue int
);

INSERT INTO Clause VALUES
(1, 'ClauseName1'), 
(2, 'ClauseName2'),
(3, 'ClauseName3');

INSERT INTO Process VALUES
(1, 'ProcessName1'), 
(2, 'ProcessName2'),
(3, 'ProcessName3');

INSERT INTO RELProcessClauses VALUES
(1, 1, 10), 
(1, 2, 15),
(1, 3, 20),
(2, 1, 15),
(2, 2, 20),
(2, 3, 20),
(3, 1, 30),
(3, 2, 30),
(3, 3, 30);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...