可以行转列,也可以多表连接DECLARE @SQL VARCHAR(8000),@TABLES VARCHAR(8000)
SET @SQL='SELECT T1.bh,T1.length,T1.width,T1.height,T1.parts'
SET @TABLES=' FROM tb1 T1'
SELECT @SQL=@SQL+',T'+RN+'.length length'+RN+',T'+RN+'.width width'+RN+',T'+RN+'.height height'+RN+',T'+RN+'.parts parts'+RN
,@TABLES=@TABLES+' JOIN tb1 T'+RN+' ON T1.bh=T'+RN+'.bh AND T'+RN+'.name='''+name+''''
FROM(
SELECT name,CAST(ROW_NUMBER()OVER(ORDER BY name)AS VARCHAR(10))RN
FROM tb1
GROUP BY name
)T
WHERE RN>1
ORDER BY name
--PRINT @SQL
SELECT TOP 1 @SQL=@SQL+@TABLES+' WHERE T1.name='''+name+''''
FROM tb1
ORDER BY name
PRINT @SQL
EXEC(@SQL)

解决方案 »

  1.   

    行转列DECLARE @SQL VARCHAR(8000),@TABLES VARCHAR(8000)
    SET @SQL='SELECT bh'
    SELECT @SQL=@SQL+',MAX(CASE WHEN name='''+name+'''THEN length END)length'+RN
    +',MAX(CASE WHEN name='''+name+'''THEN width END)width'+RN
    +',MAX(CASE WHEN name='''+name+'''THEN height END)height'+RN
    +',MAX(CASE WHEN name='''+name+'''THEN parts END)parts'+RN
    FROM(
    SELECT name,CAST(ROW_NUMBER()OVER(ORDER BY name)AS VARCHAR(10))RN
    FROM tb1
    GROUP BY name
    )T
    ORDER BY name
    SET @SQL=@SQL+' FROM tb1 GROUP BY bh'
    EXEC(@SQL)