一、COALESCE是一个返回参数中第一个非NULL值的函数,
列如:COALESCE(a,b,c,d,e);可以按照顺序取abcde,中的第一个非空数据,abcde可以是表达式
用case when 加ISNULL也可以实现,但是写法复杂了
     
     --根据部件id获取产品型号的板材指定类型,1-获取客户的板材指定方式是真指定就是真指定,
      --2-获取不可替代本厂编号是否是不可替代,是就是真指定
      --3-获取MI上的客户是否指定板材,是就是加指定,否则就是不指定
 select  temp1.ProductPartId,
 max(CASE WHEN temp1.BoardType='真指定' THEN '真指定' else null end) as pnBoardType
 ,max(CASE WHEN temp1.ProductNumber1 is not null THEN '真指定' else null end) as pnBoardType2
 ,max(CASE WHEN temp3.bckhyq ='是' THEN '假指定' else '不指定' end )as pnBoardType3
,COALESCE(CASE WHEN temp1.BoardType='真指定' THEN '真指定' else null end, CASE WHEN temp1.ProductNumber1 is not null THEN '真指定' else null end, CASE WHEN temp3.bckhyq ='是' THEN '假指定' else '不指定' end) AS pnBoardTypetemp 
  
 INTO    #temp44
 from  #temp11 temp1
 LEFT JOIN #temp33 temp3 on temp3.ProductPartId=temp1.ProductPartId
GROUP BY temp1.ProductPartId,COALESCE(CASE WHEN temp1.BoardType='真指定' THEN '真指定' else null end, CASE WHEN temp1.ProductNumber1 is not null THEN '真指定' else null end, CASE WHEN temp3.bckhyq ='是' THEN '假指定' else '不指定' end);

二、PIVOT函数,用于行转列
SELECT [非旋转列], [旋转后的列1], [旋转后的列2], ... FROM (SELECT [原始数据列] FROM 表) AS 数据源 PIVOT ([聚合函数](被聚合列)FOR [旋转列] IN ([列值1], [列值2], ...) ) AS 别名
-  
非旋转列:结果中保持为行的列(如产品类别、年份等)。
 -  
旋转列:需要从行值转换为列名的列(如月份、状态等)。
 -  
被聚合列:需要统计的数值列(如销售额、数量等)。
 -  
聚合函数:如
SUM、AVG、COUNT等。 
SELECT top 10 t.ProductPartId
         ,t.bcjclx
         ,t.BCXH
         ,t.bckhyq from  (
 SELECT p.ProductPartId, eo.ParamCode, p.ParamValue
          FROM SL_pe_Schema.MakeProductPart(NOLOCK)part
               JOIN SL_pe_Schema.MakeProcedureParam(NOLOCK)p ON p.ProductPartId=part.ProductPartId
               JOIN SL_pe_Schema.BaseEngineersParam(NOLOCK)eo ON eo.EngineersParamId=p.EngineersParamId
          WHERE eo.ParamCode IN ('bckhyq','bcjclx','dlcc','PPQTY','bcgys','yhhd', 'sfht', 'bh', 'wulu', 'tgvalue', 'jcth', 'lvhao', 'lvhou', 'drxs', 'JZCH','BCXH','tblx')
             ) tmp     
                 PIVOT(min(tmp.ParamValue)
                 FOR tmp.ParamCode  IN(bckhyq,bcjclx,dlcc,PPQTY,bcgys,yhhd, sfht, bh, wulu, tgvalue, jcth, JZCH,BCXH,tblx,lvhou,lvhao,drxs)
                 ) t 
将原始数据行专列

当然平常的数据库可能没有这个函数,还是有通用方法的,那就是CASE WHEN,只要参数名是固定已知的,就可以用CASE WHEN加聚合函数进行 group by 行转列
