现在:
表1:
city county species count湛江 霞山 绿色 1000
湛江 霞山 红色 1000
南宁 百色 红色 2000表2:
city county watername count1 湛江 霞山 淡水 1000
湛江 霞山 深水 2000 现在想得到的表是(最好是视图)
表3:
city country species1 count1 species2 count2 species3 count3 water1 c1 water2 c2湛江 霞山 绿色 1000 红色 1000 淡水 1000 深水 2000
补充说明:表1的species字段的个数可能会变化,因为表中暂时没有这个品种,如表3中species3 就没有了数据,没有的希望就为空串,同样,表2中的watername也是这样。
麻烦高手帮我解决,有兴趣的大家一起学习一下。thanks!!
表1:
city county species count湛江 霞山 绿色 1000
湛江 霞山 红色 1000
南宁 百色 红色 2000表2:
city county watername count1 湛江 霞山 淡水 1000
湛江 霞山 深水 2000 现在想得到的表是(最好是视图)
表3:
city country species1 count1 species2 count2 species3 count3 water1 c1 water2 c2湛江 霞山 绿色 1000 红色 1000 淡水 1000 深水 2000
补充说明:表1的species字段的个数可能会变化,因为表中暂时没有这个品种,如表3中species3 就没有了数据,没有的希望就为空串,同样,表2中的watername也是这样。
麻烦高手帮我解决,有兴趣的大家一起学习一下。thanks!!
/*---------------------------------
-- Author : htl258(Tony)
-- Date : 2009-09-13 11:55:31
-- Version: Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
Mar 29 2009 10:27:29
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)---------------------------------*/
--> 生成测试数据表:t1IF NOT OBJECT_ID('[t1]') IS NULL
DROP TABLE [t1]
GO
CREATE TABLE [t1]([city] NVARCHAR(10),[county] NVARCHAR(10),[species] NVARCHAR(10),[count] INT)
INSERT [t1]
SELECT N'湛江',N'霞山',N'绿色',1000 UNION ALL
SELECT N'湛江',N'霞山',N'红色',1000 UNION ALL
SELECT N'南宁',N'百色',N'红色',2000
GO
--SELECT * FROM [t1]--> 生成测试数据表:t2IF NOT OBJECT_ID('[t2]') IS NULL
DROP TABLE [t2]
GO
CREATE TABLE [t2]([city] NVARCHAR(10),[county] NVARCHAR(10),[watername] NVARCHAR(10),[count1] INT)
INSERT [t2]
SELECT N'湛江',N'霞山',N'淡水',1000 UNION ALL
SELECT N'湛江',N'霞山',N'深水',2000
GO
--SELECT * FROM [t2]-->SQL查询如下:
DECLARE @s VARCHAR(MAX),@s1 VARCHAR(MAX)
SELECT @s=ISNULL(@s+',','')+QUOTENAME(a.species)
FROM T1 a
INNER JOIN t2 b
ON a.[city]=b.[city] AND a.[county]=b.[county]
GROUP BY a.species
SELECT @s1=ISNULL(@s1+',','')+QUOTENAME(b.watername)
FROM T1 a
INNER JOIN t2 b
ON a.[city]=b.[city] AND a.[county]=b.[county]
GROUP BY b.watername
EXEC('
SELECT *
FROM (
SELECT a.city,a.county,a.species,a.[count],b.watername,b.count1
FROM T1 a
INNER JOIN t2 b
ON a.[city]=b.[city] AND a.[county]=b.[county]
) AS a
PIVOT (MAX([count]) FOR species IN('+@s+')) AS b
PIVOT (MAX(count1) FOR watername IN('+@s1+')) AS c
')
/*
city county 红色 绿色 淡水 深水
---------- ---------- ----------- ----------- ----------- -----------
湛江 霞山 1000 1000 1000 2000(1 行受影响)
*/