22,181
社区成员




DECLARE @TB TABLE(No INT, ColorNo INT, Color NVARCHAR(2), Size1 INT, Amount1 INT, Size2 INT, Amount2 INT, Size3 INT, Amount3 INT, Size4 INT, Amount4 INT)
INSERT @TB
SELECT 1, 460, N'黄色', 16, 100, 18, 80, 20, 100, 22, 120 UNION ALL
SELECT 2, 462, N'红色', 10, 100, 12, 80, 14, 100, null, null UNION ALL
SELECT 3, 464, N'黑色', 16, 100, 18, 80, null, null, null, null UNION ALL
SELECT 4, 466, N'白色', 13, 100, 15, 80, 21, 100, null, null
DECLARE @TA TABLE(No INT, ColorNo INT, Size INT, AtAmount INT)
INSERT @TA
SELECT 1, 460, 16, 30 UNION ALL
SELECT 1, 460, 18, 80 UNION ALL
SELECT 1, 460, 20, 20 UNION ALL
SELECT 1, 460, 22, 50 UNION ALL
SELECT 2, 462, 10, 60 UNION ALL
SELECT 2, 462, 12, 40 UNION ALL
SELECT 2, 462, 14, 30 UNION ALL
SELECT 3, 464, 16, 20 UNION ALL
SELECT 3, 464, 18, 20 UNION ALL
SELECT 4, 466, 13, 20 UNION ALL
SELECT 4, 466, 15, 20 UNION ALL
SELECT 4, 466, 21, 20
SELECT T.*,AtAmount
FROM (
SELECT ColorNo,Color,Size1 AS [Size],Amount1 as Amount FROM @TB
UNION ALL
SELECT ColorNo,Color,Size2,Amount2 FROM @TB
UNION ALL
SELECT ColorNo,Color,Size3,Amount3 FROM @TB
UNION ALL
SELECT ColorNo,Color,Size4,Amount4 FROM @TB
)T JOIN @TA AS B ON T.ColorNo=B.ColorNo AND T.[Size]=B.[Size]
WHERE T.[Size] IS NOT NULL AND T.Amount IS NOT NULL
ORDER BY T.ColorNo,T.[Size]
/*
ColorNo Color Size Amount AtAmount
----------- ----- ----------- ----------- -----------
460 黄色 16 100 30
460 黄色 18 80 80
460 黄色 20 100 20
460 黄色 22 120 50
462 红色 10 100 60
462 红色 12 80 40
462 红色 14 100 30
464 黑色 16 100 20
464 黑色 18 80 20
466 白色 13 100 20
466 白色 15 80 20
466 白色 21 100 20
(12 row(s) affected)
*/
select T1.ColorNo,T2.Color,T1.size,T3.amount
from Table2 T1,table1 T2,table1 T3
where T1.colorNo=T2.ColorNo
and T1.size=T3.size1
union all
select T1.ColorNo,T2.Color,T1.size,T3.amount
from Table2 T1,table1 T2,table1 T3
where T1.colorNo=T2.ColorNo
and T1.size=T3.size2
union
select T1.ColorNo,T2.Color,T1.size,T3.amount
from Table2 T1,table1 T2,table1 T3
where T1.colorNo=T2.ColorNo
and T1.size=T3.size3
union all
select T1.ColorNo,T2.Color,T1.size,T3.amount
from Table2 T1,table1 T2,table1 T3
where T1.colorNo=T2.ColorNo
and T1.size=T3.size4
-->> Author: 让你望见影子的墙(HEROWANG)生成测试数据 Date:2009-04-06 09:31:59
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
Go
CREATE TABLE tb(No INT,ColorNo INT,Color NVARCHAR(2),Size1 INT,Amount1 INT,Size2 INT,Amount2 INT,Size3 INT,Amount3 INT,Size4 INT,Amount4 INT)
Go
INSERT INTO tb
SELECT 1,460,'黄色',16,100,18,80,20,100,22,120 UNION ALL
SELECT 2,462,'红色',10,100,12,80,14,100,null,null UNION ALL
SELECT 3,464,'黑色',16,100,18,80,null,null,null,null UNION ALL
SELECT 4,466,'白色',13,100,15,80,21,100,null,null
GO
SELECT * FROM TB
go
create view v1
as
select * from
(
select ColorNo , Color ,Size=size1,amount=amount1
from tb
union all
select ColorNo , Color ,Size=size2,amount=amount2
from tb
union all
select ColorNo , Color ,Size=size3,amount=amount3
from tb
union all
select ColorNo , Color ,Size=size4,amount=amount4
from tb
)K
where size is not null
go
select * from v1 order by colorno,color
ColorNo Color Size amount
----------- ----- ----------- -----------
460 黄色 16 100
460 黄色 18 80
460 黄色 20 100
460 黄色 22 120
462 红色 14 100
462 红色 12 80
462 红色 10 100
464 黑色 16 100
464 黑色 18 80
466 白色 15 80
466 白色 13 100
466 白色 21 100
(12 行受影响)