SQLSERVER将多行转为一行,并将某列的内容作为多列标题

本文目的:将多行转为一行,并将某列的内容作为多列标题。
SELECT DISTINCT TOP 50000 pom.billing_date,pom.production_no AS 工卡,pom.customer_name AS 客户,
    pom.cloth_no AS 布编号,pom.cloth_name AS 布种,pom.cust_section_no AS 客户款号,
    pom.color AS 颜色,pom.dye_no AS 色号,pom.zstrip AS 总条数,pom.zwkgs AS 总重量, dpp.procedure_name AS 工序--,dpp.myid   
    INTO #t
    FROM dbo.pro_outstore_detail pod WITH(NOLOCK)
    LEFT JOIN dbo.pro_outstore_master pom WITH(NOLOCK)  ON pod.invno = pom.invno
    LEFT JOIN dbo.dye_pro_master dpm WITH(NOLOCK) ON  pom.production_no=dpm.production_no
    LEFT JOIN dbo.dye_pro_process dpp WITH(NOLOCK) ON dpm.production_no = dpp.production_no    
    WHERE pom.billing_date>='2019-11-10' AND pom.billing_date<='2019-11-15' AND ISNULL(dpp.procedure_name,'')>''

--以上为结果集中间表

CREATE  TABLE #m ( 工序 NVARCHAR(50) NULL )
INSERT INTO #m 
SELECT DISTINCT 工序 FROM #t

--以上为需要转换的列的内容,作为一个中间表


DECLARE @sql_col NVARCHAR(MAX)= ' '
SET @sql_col = ' '
SELECT  @sql_col+= 'ISNULL(MAX(CASE 工序 WHEN ''' + 工序
        + ''' THEN billing_date END  ),'''') AS [' + 工序 + '],'
FROM    #m             

--以上为列内容转换为列标题的拼接语句
 
      
IF ( @sql_col != '' )
    BEGIN          
        SET @sql_col = @sql_col + '$'          
        SET @sql_col = REPLACE(@sql_col, ',$', '')          
    END          
  --多了一个, 去掉  
  
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT 工卡,客户,布编号,布种,客户款号,颜色,色号,总条数,总重量, ' + @sql_col                       
SET @sql += ' FROM    #t  GROUP BY 工卡,客户,布编号,布种,客户款号,颜色,色号,总条数,总重量 '
  --以上为查询语句
EXEC(@sql)              
PRINT ( @sql )


DROP TABLE #t
DROP TABLE #m

你可能感兴趣的:(SQLSERVER,行内容转换为列)