FOR XML PATH实现小九九

数据库环境:SQL SERVER2008R2

今天我们用SQL实现一下九九乘法表的功能。

实现的逻辑不是很复杂,难点在于怎么把想要的内容从同一列里头拼接到同一行上。

在这里,我们用到了FOR XML PATH,FOR XML的用法,可以到MSDN去看,这里就不细讲了。

/*数据准备,生成自然数1-9*/
WITH    x0
          AS ( SELECT   id
               FROM     t100
               WHERE    id <= 9
             ),/*生成所有可能的乘法组合*/
        x1
          AS ( SELECT   a.id AS aid ,
                        b.id AS bid ,
                        CONVERT(VARCHAR(1), a.id) + ' * '
                        + CONVERT(VARCHAR(1), b.id) + ' = '
                        + CONVERT(VARCHAR(2), a.id * b.id) AS result
               FROM     x0 a ,
                        x0 b
               WHERE    a.id <= b.id
             )
    /*把被乘数相同的转到同一行上*/
    SELECT  result
    FROM    ( SELECT    bid ,
                        ( SELECT    '  ' + result AS [text()]
                          FROM      x1 AS t2
                          WHERE     t2.bid = t1.bid
                        FOR
                          XML PATH('')
                        ) AS result
              FROM      x1 AS t1
              GROUP BY  bid
            ) t;    

相关的说明已经在代码里进行注释。最后,附上结果图。

(本文完)

原文地址:https://www.cnblogs.com/boss-he/p/4534152.html