主页 > 手机  > 

sqlsqlserver的特殊函数COALESCE和PIVOT的用法分析

sqlsqlserver的特殊函数COALESCE和PIVOT的用法分析

一、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  行转列

标签:

sqlsqlserver的特殊函数COALESCE和PIVOT的用法分析由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“sqlsqlserver的特殊函数COALESCE和PIVOT的用法分析