例如表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

解决方案 »

  1.   


    /*---------------------------------
    --  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
    */