表结构和数据如下:
表: T
字段: SN QTY
数据: A 5
B 3
C 2
想通过一句SQL查询语句达到以下结果数据
A-1
A-2
A-3
A-4
A-5
B-1
B-2
B-3
C-1
C-2
请教各位高手!!
------解决方案--------------------
IF EXISTS(SELECT NAME FROM sysobjects AS s WHERE NAME = 'test')
DROP TABLE test
GO
CREATE TABLE test (sn CHAR(1) , qty INT)
GO
INSERT INTO test
SELECT 'A' , 5 UNION ALL
SELECT 'B' , 3 UNION ALL
SELECT 'C' , 2
GO
--執行查詢
SELECT test.sn , a.number + 1 FROM MASTER..spt_values AS a , test WHERE [TYPE] = 'P' AND a.number < test.qty
--結果
/*
sn
---- -----------
A 1
A 2
A 3
A 4
A 5
B 1
B 2
B 3
C 1
C 2
(10 row(s) affected)
*/
------解决方案--------------------
CREATE TABLE #testTable
(
Sn VARCHAR(10) NOT NULL ,
Qty INT NOT NULL
);
GO
INSERT INTO #testTable
VALUES ( 'A', 5 ),
( 'B', 3 ),
( 'C', 2 );
GO
SELECT *
FROM #testTable;
GO
-- 使用辅助的序列表来完成,这里用master..spt_values来替代;
SELECT tt.Sn + '-' + CAST(sv.number AS VARCHAR)
FROM #testTable AS tt
CROSS JOIN master..spt_values AS sv
WHERE sv.number BETWEEN 1 AND tt.Qty
AND sv.type = 'P'
GO