行专列问题
数据如下:
不良表:
日期	            品名	不良项目	数量
2012/12/1	1451-EE29-18	砂渣孔	        1
2012/12/1	1451-EE29-18	文字不良	1
2012/12/1	1451-EJ33-28	壳模损坏	2
2012/12/1	5531-0803-58	壳模破裂	18
2012/12/1	5541-0503-58	壳内穿刺	60
2012/12/1	3852-1602-68	壳模脱落	1
2012/12/1	3111-0510-58	缩孔	        1
2012/12/1	5541-0603-58	鼓胀	        1
2012/12/1	1481-AF02-28	缩孔	        1
2012/12/1	1451-EE29-18	缩孔	        1
2012/12/1	1451-EK47-18	缩孔	        1
入库表:
日期	            品名	数量
2012/12/1	1451-EE29-18	2
2012/12/1	1451-EE29-18	2
2012/12/1	1451-EJ33-28	52
2012/12/1	5531-0803-58	203
2012/12/1	5541-0503-58	410
2012/12/1	3852-1602-68	2
2012/12/1	3111-0510-58	819
2012/12/1	5541-0603-58	257
2012/12/1	1481-AF02-28	57
2012/12/1	1451-EE29-18	2
2012/12/1	1451-EK47-18	50
想要的结果:
日期	品名	鼓胀	壳模破裂	壳模损坏	壳模脱落	壳内穿刺	砂渣孔	缩孔	文字不良	总计	入库数量	不良率%
2012/12/1	1451-EE29-18						1	1	1	3	6	33.33
2012/12/2	1451-EJ33-28			2						2	52	3.70
2012/12/3	1451-EK47-18							1		1	50	1.96
2012/12/4	1481-AF02-28							1		1	57	1.72
2012/12/5	3111-0510-58							1		1	819	0.12
2012/12/6	3852-1602-68				1					1	2	33.33
2012/12/7	5531-0803-58		18							18	203	8.14
2012/12/8	5541-0503-58					60				60	410	12.77
2012/12/9	5541-0603-58	1								1	257	0.39
------解决方案--------------------SELECT '日期' = CONVERT(VARCHAR(10),A.日期,120),
       A.品名,
       '砂渣孔' = ISNULL(SUM(CASE WHEN 不良项目 = '砂渣孔' THEN B.数量 END),0),
       '缩孔' = ISNULL(SUM(CASE WHEN 不良项目 = '缩孔' THEN B.数量 END),0),
       '文字不良' = ISNULL(SUM(CASE WHEN 不良项目 = '文字不良' THEN B.数量 END),0),
       '壳模损坏' = ISNULL(SUM(CASE WHEN 不良项目 = '壳模损坏' THEN B.数量 END),0),
       '壳模脱落' = ISNULL(SUM(CASE WHEN 不良项目 = '壳模脱落' THEN B.数量 END),0),
       '壳模破裂' = ISNULL(SUM(CASE WHEN 不良项目 = '壳模破裂' THEN B.数量 END),0),
       '壳内穿刺' = ISNULL(SUM(CASE WHEN 不良项目 = '壳内穿刺' THEN B.数量 END),0),
       '鼓胀' = ISNULL(SUM(CASE WHEN 不良项目 = '鼓胀' THEN B.数量 END),0),
       '总计' = ISNULL(C.不良数量,0),
       A.入库数量,
       '不良率%' = 100.0*ISNULL(C.不良数量,0)/NULLIF(A.入库数量+C.不良数量,0)
FROM (SELECT CONVERT(VARCHAR(10),日期,120) AS '日期',品名,SUM(数量) AS '入库数量' FROM 入库表
      GROUP BY CONVERT(VARCHAR(10),日期,120),品名) A
  LEFT JOIN 不良表 B ON B.品名 = A.品名 AND CONVERT(VARCHAR(10),B.日期,120) = CONVERT(VARCHAR(10),A.日期,120)
  LEFT JOIN (SELECT CONVERT(VARCHAR(10),日期,120) AS '日期',品名,SUM(数量) AS '不