求解 sql 2005 语句,因为数据较多,最好是静态和动态2种方式的语句,如果当前内容和当前时间不好写的话,可以忽略不要,请高手解答,求了好多天了,谢谢了!

解决方案 »

  1.   

    当前内容和当前时间没看出什么规律,
    后面就是列转行,用pivot,case 都可以
      

  2.   

    --动态
    DECLARE @MAX INT
    SELECT @MAX=MAX([顺序])FROM 表名
    DECLARE @SQL VARCHAR(8000)
    SET @SQL=''
    DECLARE @Column VARCHAR(8000)
    SET @Column=''
    SELECT @SQL=@SQL
    +',MIN(CASE WHEN [顺序]='+CAST(number AS VARCHAR(10))+' THEN[内容]END)['+CAST(number AS VARCHAR(10))+']'
    ,@Column=@Column+',T1.['+CAST(number AS VARCHAR(10))+']'
    FROM master..spt_values WHERE [type]='P'AND number>0 AND number<=@MAX
    SET @SQL='SELECT T1.ID,T2.[内容][当前内容],ISNULL(T3.[完成时间],T3.[开始时间])[当前时间]'+@Column
    +'FROM(SELECT ID,MIN(CASE WHEN[完成时间]IS NULL THEN[顺序]END)[当前内容顺序]'
    +',MAX(CASE WHEN[开始时间]IS NOT NULL THEN[顺序]END)[当前时间顺序]'+@SQL
    +'FROM 表名 GROUP BY ID)T1 '
    +'JOIN 表名 T2 ON T1.ID=T2.ID AND T1.[当前内容顺序]=T2.[顺序]'
    +'JOIN 表名 T3 ON T1.ID=T3.ID AND T1.[当前时间顺序]=T3.[顺序]'
    PRINT @SQL
    EXEC(@SQL)
    --静态
    SELECT T1.ID
    ,T2.[内容][当前内容]
    ,ISNULL(T3.[完成时间],T3.[开始时间])[当前时间]
    ,T1.[1],T1.[2],T1.[3],T1.[4],T1.[5]
    FROM
    (SELECT
    ID
    ,MIN(CASE WHEN[完成时间]IS NULL THEN[顺序]END)[当前内容顺序]
    ,MAX(CASE WHEN[开始时间]IS NOT NULL THEN[顺序]END)[当前时间顺序]
    ,MIN(CASE WHEN [顺序]=1 THEN[内容]END)[1]
    ,MIN(CASE WHEN [顺序]=2 THEN[内容]END)[2]
    ,MIN(CASE WHEN [顺序]=3 THEN[内容]END)[3]
    ,MIN(CASE WHEN [顺序]=4 THEN[内容]END)[4]
    ,MIN(CASE WHEN [顺序]=5 THEN[内容]END)[5]
    FROM 表名 GROUP BY ID)T1
    JOIN 表名 T2 ON T1.ID=T2.ID AND T1.[当前内容顺序]=T2.[顺序]
    JOIN 表名 T3 ON T1.ID=T3.ID AND T1.[当前时间顺序]=T3.[顺序]要替换正确哈~
      

  3.   

    ID   CODE   QTY
    1    A      10
    2    A      20
    3    B       5
    4    C      45
    5    A       8
    6    C      18
    ...求每CODE的ID号最大的QTY值
    即:
    ID   CODE   QTY
    5    A       8
    3    B       5
    6    C      18