SQL实验四

如何实现这样的查询行变成列 
有这样两个数据表
(WuZi_Table)
物资编码(id), 颜色编号(Color_id), 数量(acount)
1111          1                   10
2222          2                   20
1111          1                   20
3333          3                   5
1111          3                   10
(YanSe_Table)
颜色编号(Color_id), 颜色名称(Color)
1                   
红色
2                   
兰色
3                   
绿色
...
颜色可能会增加
如何查询得到
物资编码   红色    兰色    绿色  ...
1111       30      0       10
2222       0       20      0
3333       0       0       5
存储过程如何写?

USE Master
Create DataBase myTest
GO


Use myTest
--(WuZi_Table)
--
物资编码(id), 颜色编号(Color_id), 数量(acount)
--
1111          1                   10
--
2222          2                   20
--
1111          1                   20
--
3333          3                   5
--
1111          3                   10
Create Table [WuZi_Table]
(
    id 
int,Color_id int,acount int
)
GO

--(YanSe_Table)
--
颜色编号(Color_id), 颜色名称(Color)
--
1                   红色
--
2                   兰色
--
3                   绿色
Create Table [YanSe_Table]
(
    Color_id 
int,Color varchar(10)
)
GO

INSERT INTO [myTest].[dbo].[WuZi_Table]
VALUES
(
1111,1,10)
GO
INSERT INTO [myTest].[dbo].[WuZi_Table]
VALUES
(
2222,2,20)
GO
INSERT INTO [myTest].[dbo].[WuZi_Table]
VALUES
(
1111,1,20)
GO
INSERT INTO [myTest].[dbo].[WuZi_Table]
VALUES
(
3333,3,5)
GO
INSERT INTO [myTest].[dbo].[WuZi_Table]
VALUES
(
1111,3,10)
GO


INSERT INTO [myTest].[dbo].[YanSe_Table]
VALUES
(
1,'红色')
GO
INSERT INTO [myTest].[dbo].[YanSe_Table]
VALUES
(
2,'兰色')
GO
INSERT INTO [myTest].[dbo].[YanSe_Table]
VALUES
(
3,'绿色')
GO


-- =============================================
--
 Author:        ajayumi
--
 Create date: 2008-05-19
--
 Description:    
--
 制作如下效果:
--
 物资编码   红色    兰色    绿色  
--
 1111       30      0       10
--
 2222       0       20      0
--
 3333       0       0       5
--
 =============================================
Create PROCEDURE ajProc
AS
BEGIN
    
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    
-- Insert statements for procedure here
    CREATE TABLE [tb_Temp]([ID] INT,[Color] VARCHAR(10),[Count] INT)
    
INSERT INTO [tb_Temp] 
    
SELECT [id],[color],[acount]
    
FROM [WuZi_Table] INNER JOIN [YanSe_Table]
    
ON [WuZi_Table].[Color_id] = [YanSe_Table].[Color_id]

    
DECLARE @s VARCHAR(2000)
    
SET @s='SELECT ID 物资编码'
    
SELECT @s = @s+',['+Color+']=SUM(CASE [Color] WHEN '''+Color+''' THEN [Count] ELSE 0 END)'
    
FROM [tb_Temp] GROUP BY [Color]
    
EXEC(@s+'from [tb_Temp] group by ID')

    
drop table [tb_Temp]

END
GO

EXEC ajProc
GO
posted @ 2008-05-25 15:14  ajayumi  阅读(285)  评论(0)    收藏  举报