注册 登录
编程论坛 SQL Server论坛

求一个sql问题

daikeda 发布于 2008-07-23 23:19, 918 次点击
在一个product表中:有ID,Name字段
在support表中:有ID,Name字段
在uninSale表中:有S.id,P.id,ID,count字段求一条sql语句如下:

         产品1 产品2 产品3
供应商1   数量  数量  数量
供应商2   数量  数量  数量
供应商3   数量  数量  数量
....
供应商n  数量  数量  数量
谢谢各位了
1 回复
#2
happynight2008-07-24 09:14
你这是交叉表查询
如果是2000的话就需要你自己写代码实现,你可上网搜索下,大把范例
如果是2005的话好象自身就可以支持交叉表查询
-------------------------------------2000代码如下
Create Table #product([ID] Varchar(10),[Name] Varchar(10))

Create Table #support([ID] Varchar(10),[Name] Varchar(10))

Create Table #uninSale([ID] Varchar(10),[Name] Varchar(10),SID Varchar(10),PID varchar(10),[count] varchar(10))

INSERT INTO #product values('1','杯子')
INSERT INTO #product values('2','手巾')
INSERT INTO #product values('3','桌子')

INSERT INTO #support values('1','张三')
INSERT INTO #support values('2','李四')
INSERT INTO #support values('3','王五')


INSERT INTO #uninSale values('1','单1','1','1',10)
INSERT INTO #uninSale values('2','单2','1','1',20)
INSERT INTO #uninSale values('3','单3','1','2',10)


INSERT INTO #uninSale values('4','单4','2','2',10)
INSERT INTO #uninSale values('5','单5','2','2',20)
INSERT INTO #uninSale values('6','单6','2','3',10)


INSERT INTO #uninSale values('7','单7','3','3',10)
INSERT INTO #uninSale values('8','单8','3','3',20)
INSERT INTO #uninSale values('9','单9','3','1',10)


--SELECT * FROM #uninSale

declare @sql varchar(8000)

set @sql=''
select @sql=@sql + 'sum(case PID when'''+ [ID] +'''
            then [count] else 0 end) as'''+ [Name] +''','
from #product
--print '1:' + @sql

SET @sql= 'SELECT  #support.[Name] AS 供应商,' + LEFT(@sql,LEN(@sql)-1) +
          ' FROM #uninSale INNER JOIN #support ON #uninSale.SID=#support.[ID] GROUP BY #support.[Name] '
--print '2:' + @sql
exec(@sql)

Drop Table #uninSale
Drop Table #product
Drop Table #support
----------------------------------------结果

李四    0    30    10
王五    10    0    30
张三    30    10    0
1