我有一个包含多行/列的矩阵。列数始终等于行数,但我不知道确切的数字,因为它们是另一个查询的结果。
这是一个包含2列/行的简单示例
ID1 ID2
1 4 7
2 2 6
我从一个看起来像这样的表中得到这个矩阵:
ID1 ID2 Value
1 1 4
1 2 7
2 1 2
2 2 6
现在我希望得到那个矩阵的逆。
结果在Matrix中看起来像这样:
ID1 ID2
1 0.6 -0.7
2 -0.2 0.4
或者在表格中这样:
ID1 ID2 Value
1 1 0.6
1 2 -0.7
2 1 -0.2
2 2 0.4
基本上是SQL Server中的Excel Formula = {MINVERSE(Array)}
在我的数据库中,我同时拥有Table和Matrix,因此我可以使用最有效的方法来找到它的反转。
答案 0 :(得分:0)
这是2x2矩阵的实现。它很难看,因为矩阵在RDBMS是关系的意义上不是关系。但也许它会让你足够接近。
SELECT
CASE WHEN id1=id2 THEN CASE WHEN id1=1 THEN 2 ELSE 1 END ELSE ID1 END as ID2,
CASE WHEN id1=id2 THEN CASE WHEN id2=1 THEN 2 ELSE 1 END ELSE ID2 END as ID2,
CASE WHEN id1<>id2 THEN -1 ELSE 1 END * matrix.value/(determinate1.value-determinate2.value) as inverse_value
FROM
(SELECT EXP(SUM(LOG(value))) as value FRom matrix where id1=id2) as determinate1,
(SELECT EXP(SUM(LOG(value))) as value FROM matrix WHERE id1<>id2) as determinate2,
matrix;
此处位于sqlfiddle