不好意思,各位高手们,问题我描述没有完整,上面给出的只是一个特例
现在描述完整。请求再次帮忙 有一个房间表。
CREATE TABLE room (code char(10),floor char(10))
INSERT INTO room VALUES ( '201 ', '2 ')
INSERT INTO room VALUES ( '202 ', '2 ')
INSERT INTO room VALUES ( '203 ', '2 ')
INSERT INTO room VALUES ( '301 ', '3 ')
INSERT INTO room VALUES ( '302 ', '3 ')
INSERT INTO room VALUES ( '401 ', '4 ')
要根据以上数据画房间的列表图,已知每行可画@n个房间
这里@n 不是固定的,有可能比每层的房间数量多,也可能
比每层的房间数量少,举例而言,假设@n = 5 那
希望能用sql 或者存储过程实现下面的数据
'201 ', '2 '
'202 ', '2 '
'203 ', '2 '
'虚拟 ', '2 '
'虚拟 ', '2 '
'301 ', '3 '
'302 ', '3 '
'虚拟 ', '3 '
'虚拟 ', '3 '
'虚拟 ', '3 '
'401 ', '4 '
'虚拟 ', '4 '
'虚拟 ', '4 '
'虚拟 ', '4 '
'虚拟 ', '4 '
假设 @n =2 的话 ,那么
希望能用sql 或者存储过程实现下面的数据
'201 ', '2 '
'202 ', '2 '
'203 ', '2 '
'虚拟 ', '2 '
'301 ', '3 '
'302 ', '3 '
'401 ', '4 '
'虚拟 ', '4 '
--注意 @n 只是变量,并不只是,2或者5
如果有了上述的数据,我就可以要达到下面的图形效果 假设@n = 5
201 202 203 '虚拟 ' '虚拟 '
301 302 '虚拟 ' '虚拟 ' '虚拟 '
401 '虚拟 ' '虚拟 ' '虚拟 ' '虚拟 ' 假设@n = 2
201 202
203 '虚拟 '
301 302
401 '虚拟 ' --上面的图形只是意思而已,存储过程不是用来生成上面的图形,
而是要生成数据。
请教如何用sql 语法或者存储过程来实现这样的结果?谢谢大家
现在描述完整。请求再次帮忙 有一个房间表。
CREATE TABLE room (code char(10),floor char(10))
INSERT INTO room VALUES ( '201 ', '2 ')
INSERT INTO room VALUES ( '202 ', '2 ')
INSERT INTO room VALUES ( '203 ', '2 ')
INSERT INTO room VALUES ( '301 ', '3 ')
INSERT INTO room VALUES ( '302 ', '3 ')
INSERT INTO room VALUES ( '401 ', '4 ')
要根据以上数据画房间的列表图,已知每行可画@n个房间
这里@n 不是固定的,有可能比每层的房间数量多,也可能
比每层的房间数量少,举例而言,假设@n = 5 那
希望能用sql 或者存储过程实现下面的数据
'201 ', '2 '
'202 ', '2 '
'203 ', '2 '
'虚拟 ', '2 '
'虚拟 ', '2 '
'301 ', '3 '
'302 ', '3 '
'虚拟 ', '3 '
'虚拟 ', '3 '
'虚拟 ', '3 '
'401 ', '4 '
'虚拟 ', '4 '
'虚拟 ', '4 '
'虚拟 ', '4 '
'虚拟 ', '4 '
假设 @n =2 的话 ,那么
希望能用sql 或者存储过程实现下面的数据
'201 ', '2 '
'202 ', '2 '
'203 ', '2 '
'虚拟 ', '2 '
'301 ', '3 '
'302 ', '3 '
'401 ', '4 '
'虚拟 ', '4 '
--注意 @n 只是变量,并不只是,2或者5
如果有了上述的数据,我就可以要达到下面的图形效果 假设@n = 5
201 202 203 '虚拟 ' '虚拟 '
301 302 '虚拟 ' '虚拟 ' '虚拟 '
401 '虚拟 ' '虚拟 ' '虚拟 ' '虚拟 ' 假设@n = 2
201 202
203 '虚拟 '
301 302
401 '虚拟 ' --上面的图形只是意思而已,存储过程不是用来生成上面的图形,
而是要生成数据。
请教如何用sql 语法或者存储过程来实现这样的结果?谢谢大家
INSERT INTO room VALUES ('201','2')
INSERT INTO room VALUES ('202','2')
INSERT INTO room VALUES ('203','2')
INSERT INTO room VALUES ('301','3')
INSERT INTO room VALUES ('302','3')
INSERT INTO room VALUES ('401','4')
GOCREATE PROCEDURE SP_TEST(@N INT)
AS
BEGIN
IF @N<1
return
DECLARE @T TABLE(ID INT IDENTITY(1,1),CODE VARCHAR(4))
SET ROWCOUNT 100
INSERT INTO @T SELECT '' FROM syscolumns a,syscolumns b
SET ROWCOUNT 0
SELECT * FROM room
UNION ALL
SELECT
'虚拟' as CODE,floor
FROM
(SELECT floor,count(*) as NUM FROM room group by floor) a,
@T b
WHERE
(case when a.NUM%@N=0 then 0 else @N-a.NUM%@N end)>=b.ID
ORDER BY
floor,code
END
GOEXEC SP_TEST 2
/*
code floor
---------- ----------
201 2
202 2
203 2
虚拟 2
301 3
302 3
401 4
虚拟 4
*/EXEC SP_TEST 5
/*
code floor
---------- ----------
201 2
202 2
203 2
虚拟 2
虚拟 2
301 3
302 3
虚拟 3
虚拟 3
虚拟 3
401 4
虚拟 4
虚拟 4
虚拟 4
虚拟 4
*/GODROP PROCEDURE SP_TEST
DROP TABLE room
GO
SET ROWCOUNT 100 --修改该值为更大的取值即可
SET ROWCOUNT 100 --修改该值为更大的取值即可 ---------
SET ROWCOUNT @N
INSERT INTO room VALUES ('201','2')
INSERT INTO room VALUES ('202','2')
INSERT INTO room VALUES ('203','2')
INSERT INTO room VALUES ('301','3')
INSERT INTO room VALUES ('302','3')
INSERT INTO room VALUES ('401','4')
GOCREATE PROCEDURE SP_TEST(@N INT)
AS
BEGIN
IF @N<1
return
DECLARE @T TABLE(ID INT IDENTITY(1,1),CODE VARCHAR(4))
SET ROWCOUNT @N --SET ROWCOUNT 100
INSERT INTO @T SELECT '' FROM syscolumns a,syscolumns b
SET ROWCOUNT 0
SELECT * FROM room
UNION ALL
SELECT
'虚拟' as CODE,floor
FROM
(SELECT floor,count(*) as NUM FROM room group by floor) a,
@T b
WHERE
(case when a.NUM%@N=0 then 0 else @N-a.NUM%@N end)>=b.ID
ORDER BY
floor,code
END
GOEXEC SP_TEST 2
/*
code floor
---------- ----------
201 2
202 2
203 2
虚拟 2
301 3
302 3
401 4
虚拟 4
*/EXEC SP_TEST 5
/*
code floor
---------- ----------
201 2
202 2
203 2
虚拟 2
虚拟 2
301 3
302 3
虚拟 3
虚拟 3
虚拟 3
401 4
虚拟 4
虚拟 4
虚拟 4
虚拟 4
*/GODROP PROCEDURE SP_TEST
DROP TABLE room
GO