我正在做矩阵乘法项目,涉及矩阵
所以这是我的表格格式:
create table A ( row integer, col integer, val integer);
我需要做的是用数据填写每个表格,
任务1:创建一个200 * 200的矩阵A,并将其所有元素初始化为1
这意味着我会手动做
插入< 0,0,1> < 0,1,1> < 0,2,1> ....< 0,199,1>
插入< 1,0,1> < 1,1,1> < 0,2,1> .....< 1,199,1>所以
任务2:创建200 * 200矩阵A,其对角线元素为1。
所以我想知道而不是手动执行此操作,如果无论如何要自动初始化所有元素?
以下是使用while循环的尝试:
create table A ( row integer, col integer, val integer);
DECLARE @count INT
SET @count = 0
DECLARE @count2 INT
SET @count2 = 0
WHILE (@count < 200)
BEGIN
WHILE (@count2 <200)
BEGIN
INSERT INTO A([row], [col]) VALUES (@count, @counts)
SET @count2 = (@count2 + 1)
END
SET @count = (@count + 1)
END
以上这个正确吗?我对sql很新:(
答案 0 :(得分:2)
避免循环和迭代的东西。你在SQL Server中 - 认为基于集合
试试这个
insert into A( row, col, val )
select row, col, 1
from
(
SELECT Row = number from master..spt_values
where type='P' and number between 1 and 200
) Rows
CROSS JOIN
(
SELECT Col = number from master..spt_values
where type='P' and number between 1 and 200
) Cols
对于你的第二个要求,你可以懒惰并添加
where Row = Col
如果这是一次性的事情那么这应该没问题。
master..spt_values
位是关于获得1到200之间的数字范围。您也可以使用此变体:
; WITH cte AS
(
SELECT n = number FROM master..spt_values
WHERE type = 'P' AND number BETWEEN 1 AND 20
)
INSERT INTO A ( row, col, val )
SELECT Rows.n, Cols.n, 1
FROM
cte AS Rows
CROSS JOIN
cte AS Cols ;