sql打印一个3*3矩阵

好奇就试了试。
表1 matrix

orderlistvaluevalue2value3
a111
a122
a133
a214
a225
a236
a317
a328
a339

代码

 DECLARE @i INT,@j INT
 DECLARE @a nvarchar(50) =1
 DECLARE @value NVARCHAR(50)=0
 DECLARE @valuesum NVARCHAR(50)
 SET @i=1
 WHILE @i<=3
 BEGIN
	SET @j=1
	SET @valuesum=''
	WHILE @j<=3
	BEGIN
		SET @a=CONVERT(NVARCHAR(1),@i)+CONVERT(NVARCHAR(1),@j)
		SET @value=(SELECT VALUE FROM matrix WHERE orderlist='a'+@a)
		SET @valuesum+=@value+' '
		SET @j+=1
	END
	PRINT(@valuesum)
	PRINT(CHAR(13))
	SET @i+=1		
END

结果
在这里插入图片描述
另外我又想到了矩阵数据更新,所以这里我建了3列value,就可以保留上1次的数据(其中一列设null值用来判断更新数据,null值循环)
在这里插入图片描述

--首先不能用function,好像有update就不能用
CREATE proc autosave

@num nvarchar(50),
@value nvarchar(50)
AS
begin
--通过判断matrix的value,value2,value3的值来更新和保留数据
--这里只用value有数据,value2和value3为null举例
IF EXISTS(SELECT VALUE FROM matrix WHERE orderlist=@num )
--这里不能用not exists,因为null也被视为存在,也不能用=null
AND (SELECT VALUE2 FROM matrix WHERE orderlist=@num )IS null
AND (SELECT VALUE3 FROM matrix WHERE orderlist=@num )is null
BEGIN
--更新新数据
UPDATE matrix SET value2=@value--value3=null --删除旧数据
WHERE orderlist=@num
end
END  

附带1个其他的方法(5*5)

/*利用系统的数字辅助表,生成1-25及每连续5个数一组的组号(从1开始)*/
WITH    x0
          AS ( SELECT   ( number - 1 ) / 5 + 1 AS cn ,
                        number AS seq
               FROM     master..spt_values
               WHERE    number <= 25
                        AND number >= 1
                        AND type = 'P'
             ),/*新增一列,按组内降序排序,及在同组内从大到小排序*/
        x1
          AS ( SELECT TOP 25
                        cn ,
                        seq ,
                        ROW_NUMBER() OVER ( ORDER BY cn, seq DESC ) dseq
               FROM     x0
               ORDER BY cn ,
                        seq
             )
    /*如果是单行号,则升序;否则,降序*/
    SELECT  MAX(CASE seq % 5
                  WHEN 1 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS A ,
            MAX(CASE seq % 5
                  WHEN 2 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS B ,
            MAX(CASE seq % 5
                  WHEN 3 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS C ,
            MAX(CASE seq % 5
                  WHEN 4 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS D ,
            MAX(CASE seq % 5
                  WHEN 0 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS E
    FROM    x1
    GROUP BY cn

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值