表tb1:
id no
001 A
001 B
001 C
001 D
001 E
001 F
001 G表tb2:
id button date
001 保存 2011-1-1
001 修改 2011-1-2
001 重复保存 2011-1-3
001 提交 2011-1-4根据上面2个表的内容,其中id是主键,查询出下面的结果。感谢大家先哈。。
查询结果:
id no 保存date 修改date 重复保存date 提交date
001 A  2011-1-1 2011-1-2 2011-1-3 2011-1-4
001 B  2011-1-1 2011-1-2 2011-1-3 2011-1-4
001 C  2011-1-1 2011-1-2 2011-1-3 2011-1-4
001 D  2011-1-1 2011-1-2 2011-1-3 2011-1-4
001 E  2011-1-1 2011-1-2 2011-1-3 2011-1-4
001 F  2011-1-1 2011-1-2 2011-1-3 2011-1-4
001 G  2011-1-1 2011-1-2 2011-1-3 2011-1-4

解决方案 »

  1.   

    --> Title  : Generating test data [tb1:]
    --> Author : 
    --> Date   : 2011-06-29 10:52:54
    if object_id('[tb1:]') is not null drop table [tb1]
    go
    create table [tb1] (id nvarchar(6),no nvarchar(2))
    insert into [tb1]
    select '001','A' union all
    select '001','B' union all
    select '001','C' union all
    select '001','D' union all
    select '001','E' union all
    select '001','F' union all
    select '001','G'
    --> Title  : Generating test data [tb2:]
    --> Author : 
    --> Date   : 2011-06-29 10:52:54
    if object_id('[tb2:]') is not null drop table [tb2]
    go
    create table [tb2] (id nvarchar(6),button nvarchar(8),date datetime)
    insert into [tb2]
    select '001','保存','2011-1-1' union all
    select '001','修改','2011-1-2' union all
    select '001','重复保存','2011-1-3' union all
    select '001','提交','2011-1-4'select * from [tb1]
    select * from [tb2]
    SELECT tb1.id,tb1.no,
    MAX(CASE WHEN button = '保存' THEN CONVERT(VARCHAR(10),tb2.date,120) ELSE '' END)  AS '保存Date',
    MAX(CASE WHEN button = '修改' THEN CONVERT(VARCHAR(10),tb2.date,120) ELSE '' END)  AS '修改Date',
    MAX(CASE WHEN button = '重复保存' THEN CONVERT(VARCHAR(10),tb2.date,120) ELSE '' END)  AS '重复保存Date',
    MAX(CASE WHEN button = '提交' THEN CONVERT(VARCHAR(10),tb2.date,120) ELSE '' END)  AS '提交Date'
    FROM tb1
    FULL JOIN tb2 ON tb1.id = tb2.id
    GROUP BY tb1.id,tb1.no
    /*
    id     no   保存Date     修改Date     重复保存Date   提交Date
    ------ ---- ---------- ---------- ---------- ----------
    001    A    2011-01-01 2011-01-02 2011-01-03 2011-01-04
    001    B    2011-01-01 2011-01-02 2011-01-03 2011-01-04
    001    C    2011-01-01 2011-01-02 2011-01-03 2011-01-04
    001    D    2011-01-01 2011-01-02 2011-01-03 2011-01-04
    001    E    2011-01-01 2011-01-02 2011-01-03 2011-01-04
    001    F    2011-01-01 2011-01-02 2011-01-03 2011-01-04
    001    G    2011-01-01 2011-01-02 2011-01-03 2011-01-04(7 行受影响)
    */
      

  2.   

    select a.*,b.date,c.date,d.date,e.date
    from tb1 a 
    left join (select * from tb2 where button='保存') b on a.id=b.id
    left join (select * from tb2 where button='修改') c on a.id=c.id
    left join (select * from tb2 where button='重复保存') d on a.id=d.id
    left join (select * from tb2 where button='提交') e on a.id=e.id
      

  3.   


    create table tb1
    (
    id varchar(10),
    no varchar(10)
    )
    INSERT INTO tb1
    select
    '001', 'A'
    union select
    '001', 'B'
    union select
    '001', 'C'
    union select
    '001', 'D'
    union select
    '001', 'E'
    union select
    '001', 'F'
    union select
    '001', 'G'create table tb2
    (
    id varchar(10),
    button nvarchar(20),
    date varchar(20)
    )
    insert into tb2
    select
    '001', '保存' ,'2011-1-1'
    union select'001', '修改' ,'2011-1-2'
    union select'001', '重复保存', '2011-1-3'
    union select'001', '提交', '2011-1-4'
    SELECT ID,NO
    ,MAX(CASE BUTTON WHEN '保存' THEN date END) '保存date'
    ,MAX(CASE BUTTON WHEN '修改' THEN date END) '修改date'
    ,MAX(CASE BUTTON WHEN '重复保存' THEN date END) '重复保存date'
    ,MAX(CASE BUTTON WHEN '提交' THEN date END) '提交date'
    FROM(
    SELECT tb1.*,tb2.BUTTON,tb2.DATE FROM tb1,tb2)T
    GROUP BY ID,NO--------------------------------
    ID         NO         保存date               修改date               重复保存date             提交date
    ---------- ---------- -------------------- -------------------- -------------------- --------------------
    001        A          2011-1-1             2011-1-2             2011-1-3             2011-1-4
    001        B          2011-1-1             2011-1-2             2011-1-3             2011-1-4
    001        C          2011-1-1             2011-1-2             2011-1-3             2011-1-4
    001        D          2011-1-1             2011-1-2             2011-1-3             2011-1-4
    001        E          2011-1-1             2011-1-2             2011-1-3             2011-1-4
    001        F          2011-1-1             2011-1-2             2011-1-3             2011-1-4
    001        G          2011-1-1             2011-1-2             2011-1-3             2011-1-4(7 行受影响)
      

  4.   


    SELECT ID,NO
    ,MAX(CASE BUTTON WHEN '保存' THEN date END) '保存date'
    ,MAX(CASE BUTTON WHEN '修改' THEN date END) '修改date'
    ,MAX(CASE BUTTON WHEN '重复保存' THEN date END) '重复保存date'
    ,MAX(CASE BUTTON WHEN '提交' THEN date END) '提交date'
    FROM(
    SELECT tb1.*,tb2.BUTTON,tb2.DATE FROM tb1,tb2 WHERE tb1.ID=tb2.ID)T
    GROUP BY ID,NO
      

  5.   


    select a.id,no,max(case button when '保存' then date end) as 保存,
    max(case button when '修改' then date end) as 修改,
    max(case button when '重复保存' then date end) as 重复保存,
    max(case button when '提交' then date end) 提交 from tb1 a,tb2 b where a.id=b.idgroup by a.id,no
      

  6.   

    动态sql
    declare @sql varchar(8000)
    set @sql='select a.id,no'
    select @sql = @sql+',max(case button when '''+button+''' then date else '''' end)['+ button +']'
     from(select distinct button from tb2) as a
    set @sql = @sql+'from tb1 a,tb2 b group by a.id,no'
    exec(@sql)
      

  7.   


    SELECT ID,NO
    ,MAX(CASE BUTTON WHEN '保存' THEN date END) '保存date'
    ,MAX(CASE BUTTON WHEN '修改' THEN date END) '修改date'
    ,MAX(CASE BUTTON WHEN '重复保存' THEN date END) '重复保存date'
    ,MAX(CASE BUTTON WHEN '提交' THEN date END) '提交date'
    FROM(
    SELECT tb1.*,tb2.BUTTON,tb2.DATE FROM tb1,tb2 WHERE tb1.ID=tb2.ID)T
    GROUP BY ID,NO
      

  8.   

    采用了2楼的方法,只有这个是没有用group by的。实际的要查询的字段很多,但是主键就只有一个。