例如表A
ID Name
1 Name1
2 Name2
表B
firstTime
2009年1月5日
2009年1月6日
2009年1月7日表C
insertCount firstTime
100 2009年1月5日
200 2009年1月6日
300 2009年1月7日形成这样的数据
ID Name 2009年1月5日 2009年1月6日 2009年1月7日
1 Name1 100 200 300
2 Name2 100 200 300
ID Name
1 Name1
2 Name2
表B
firstTime
2009年1月5日
2009年1月6日
2009年1月7日表C
insertCount firstTime
100 2009年1月5日
200 2009年1月6日
300 2009年1月7日形成这样的数据
ID Name 2009年1月5日 2009年1月6日 2009年1月7日
1 Name1 100 200 300
2 Name2 100 200 300
/*---------------------------------
-- Author : htl258(Tony)
-- Date : 2009-09-17 10:12:26
-- 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)---------------------------------*/
--> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
DROP TABLE [a]
GO
CREATE TABLE [a]([ID] INT,[Name] NVARCHAR(10))
INSERT [a]
SELECT 1,'Name1' UNION ALL
SELECT 2,'Name2'
GO
--SELECT * FROM [a]--> 生成测试数据表:bIF NOT OBJECT_ID('[b]') IS NULL
DROP TABLE [b]
GO
CREATE TABLE [b]([firstTime] NVARCHAR(10))
INSERT [b]
SELECT N'2009年1月5日' UNION ALL
SELECT N'2009年1月6日' UNION ALL
SELECT N'2009年1月7日'
GO
--SELECT * FROM [b]--> 生成测试数据表:cIF NOT OBJECT_ID('[c]') IS NULL
DROP TABLE [c]
GO
CREATE TABLE [c]([insertCount] INT,[firstTime] NVARCHAR(10))
INSERT [c]
SELECT 100,N'2009年1月5日' UNION ALL
SELECT 200,N'2009年1月6日' UNION ALL
SELECT 300,N'2009年1月7日'
GO
--SELECT * FROM [c]-->SQL查询如下:
DECLARE @s VARCHAR(8000)
SELECT @s=ISNULL(@s+',','')+QUOTENAME([firstTime]) FROM b
EXEC('
SELECT *
FROM (
SELECT *
FROM a,c
) AS t
PIVOT (MAX([insertCount]) FOR [firstTime] IN('+@s+'))p
')
/*
ID Name 2009年1月5日 2009年1月6日 2009年1月7日
----------- ---------- ----------- ----------- -----------
1 Name1 100 200 300
2 Name2 100 200 300
*/