SQL用数据填充表

时间:2012-11-28 06:25:37

标签: sql matrix-multiplication


我正在做矩阵乘法项目,涉及矩阵
所以这是我的表格格式:

   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很新:(

1 个答案:

答案 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 ;