SQL Pivot使用三个表

时间:2018-09-25 15:59:24

标签: sql-server pivot

尝试将某些数据移出SQL时遇到了麻烦。

我有三个表将构成数据。

表1 :(条款)   -条款   -ClauseName

表2 :(处理)   -ID   -ProcessName

表3:(RELProcessClauses)   -ProcessId   -条款   -WeightedValue

最终,我希望有一个数据矩阵,它是Clause,ClausName在左下方,顶部的ProcessName和在Process和Clause之间对应的加权值。

不确定这是否有意义。

1 个答案:

答案 0 :(得分:0)

加入三个表,并在其上使用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);