我有两个关系(SQL数据库中的表)有纯数字.这两种关系可以想象为矩阵.
问题是编写一个SQL查询,将两个关系相乘,就像我们使用普通矩阵乘法一样.
我一直绞尽脑汁......但是没用:O
任何人都可以帮我解决?????
表1:

@Aaron Bertrand:
我正在使用SQL Server 2008 R2这些表的屏幕截图是:
表格1 :

表2:

我使用了查询:
select t1.A,t2.B,SUM(t1.C*t2.C)
from Table_1 as t1 join Table_2 as t2 on t1.B=t2.A
group by t1.A,t2.B
order by t1.A
Run Code Online (Sandbox Code Playgroud)
答案 :

这种方式非常简单,而不是像@Marcelo Cantos和@ypercube所建议的我原来的Matrix方式......
Mar*_*tos 14
假设以下结构:
A (row INT, col INT, value FLOAT)
B (row INT, col INT, value FLOAT)
Run Code Online (Sandbox Code Playgroud)
你可以这样写:
SELECT A.row, B.col, SUM(A.value * B.value)
FROM A JOIN B ON A.col = B.row
GROUP BY A.row, B.col
Run Code Online (Sandbox Code Playgroud)
编辑:使用表格的表格布局来模仿矩阵结构使这个问题变得更加困难,至少有两个原因:
最好的解决方法是在每个表中添加一个行号列,这样......
table1 (row, A, B, C)
table2 (row, A, B, C)
Run Code Online (Sandbox Code Playgroud)
...然后综合我上面建议的结构作为每个表的视图......
CREATE VIEW A
SELECT row, 1, A FROM table1 UNION
SELECT row, 2, B FROM table1 UNION
SELECT row, 3, C FROM table1 UNION
-- Ditto VIEW B
Run Code Online (Sandbox Code Playgroud)
...最后使用上面的SQL来评估答案.如有必要,您可以编写另一个视图,将结果转换回表格结构.
然而,坦率地说,我认为所有这些都是非常错误的.使用行/列/值结构(并且逻辑上更一致)比A/B/C/...结构更好.例如,考虑使用row/col/value计算矩阵转置的容易程度:
SELECT col AS row, row AS col, value
FROM A
Run Code Online (Sandbox Code Playgroud)
或者总和对角线:
SELECT SUM(value)
FROM A
WHERE row = col
Run Code Online (Sandbox Code Playgroud)
并问自己这些结构使用起来有多容易.
PS:关于逻辑连贯性的主题,你的表格不是正确意义上的关系,因为它们在行上定义了一个顺序,并且必须允许重复的行,这两个行在关系中都没有意义,这是(松散地)定义为一组元组.n维关系与二维表的这种混合是目前数据管理不善的核心问题.
| 归档时间: |
|
| 查看次数: |
29000 次 |
| 最近记录: |