表A 日期                 品名         出库时间
2010-07-16           A01            8:01
2010-07-16           A01            15:01
2010-07-16           A01            17:01
2010-05-12           A02            8:02 
2010-05-12           A01            8:11
能否能过简单的查询得到如下结果日期        品名    第一次出库时间   第二次出库时间    第三次出库时间   第四次出库时间
2010-07-16  A01          8:01            15:01              17:01           NULL
2010-07-16  A02          8:02             NULL               NULL           NULL
2010-05-12  A01          8:11.....

解决方案 »

  1.   

    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([日期] [nvarchar](10),[品名] [nvarchar](10),[出库时间] [nvarchar](10))
    INSERT INTO [tb]
    SELECT '2010-07-16','A01','8:01' UNION ALL
    SELECT '2010-07-16','A01','15:01' UNION ALL
    SELECT '2010-07-16','A01','17:01' UNION ALL
    SELECT '2010-07-16','A02','8:02' UNION ALL
    SELECT '2010-05-12','A01','8:11'--SELECT * FROM [tb]-->SQL查询如下:
    SELECT *
    FROM (
    SELECT rn=ROW_NUMBER()OVER(PARTITION BY [日期],[品名] ORDER BY CAST( 出库时间 AS DATETIME)),*
    FROM tb
    ) a
    PIVOT(MAX(出库时间) FOR rn IN([1],[2],[3],[4])) b
    ORDER BY 1
    /*
    日期         品名         1          2          3          4
    ---------- ---------- ---------- ---------- ---------- ----------
    2010-05-12 A01        8:11       NULL       NULL       NULL
    2010-07-16 A01        8:01       15:01      17:01      NULL
    2010-07-16 A02        8:02       NULL       NULL       NULL(3 行受影响)
    */
      

  2.   

    SQL:
        select * from table1 where file1='ffdffd' and file2 ='dfdfdf'
        
    如果我对 file1 和file2 分别建立索引
    那查询会 用  file1  的索引还是 file2的索引了,还是 都能用上
      

  3.   

    SQL:
        select * from table1 where file1='ffdffd' and file2 ='dfdfdf'
        
    如果我对 file1 和file2 分别建立索引
    那查询会 用  file1  的索引还是 file2的索引了,还是 都能用上
      

  4.   

    'ROW_NUMBER' 不是可以识别的 函数名。
      

  5.   

    IF OBJECT_ID('[tb]') IS NOT NULL
        DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([日期] [nvarchar](10),[品名] [nvarchar](10),[出库时间] [nvarchar](10))
    INSERT INTO [tb]
    SELECT '2010-07-16','A01','8:01' UNION ALL
    SELECT '2010-07-16','A01','15:01' UNION ALL
    SELECT '2010-07-16','A01','17:01' UNION ALL
    SELECT '2010-07-16','A02','8:02' UNION ALL
    SELECT '2010-05-12','A01','8:11'alter table tb add id intupdate tb
    set id=(select count(*) from tb where 日期=t.日期 and 品名=t.品名 and cast(t.出库时间 as datetime)>=cast(出库时间 as datetime))
    from tb t
     declare @str varchar(4000)select @str=isnull(@str,'')+',max(case when id='+ltrim(number)+' then 出库时间 else null end) ['+ ltrim(number)+']' 
    from (select distinct number from tb t,master..spt_values m 
    where t.id=m.number and type='p' and number>0 ) aexec('select 日期,品名'+@str+' from tb group by 日期,品名' )
    日期         品名         1          2          3
    ---------- ---------- ---------- ---------- ----------
    2010-05-12 A01        8:11       NULL       NULL
    2010-07-16 A01        8:01       15:01      17:01
    2010-07-16 A02        8:02       NULL       NULL
    警告: 聚合或其他 SET 操作消除了空值。(3 行受影响)