以下是2个数据源和1个结果,请高手解答。。。
------解决思路----------------------
SELECT T1.客户,T2.产品品号,T3.加工内容[当前加工内容]
,ISNULL(T3.加工完成时间,T3.加工开始时间)[最新时间]
,T2.[加工内容1]
,T2.[加工内容2]
,T2.[加工内容3]
,T2.[加工内容4]
,T2.[加工内容5]
,T3.检验状况
,T3.检验处理
,T2.开始时间
,CASE WHEN T2.是否全部完成='Y'THEN T3.加工完成时间 END[完成时间]
FROM 表1 T1 LEFT JOIN(
SELECT
产品品号
,MAX(CASE WHEN 加工开始时间 IS NOT NULL THEN 加工顺序 END)加工顺序MX
,MAX(CASE 加工顺序 WHEN 1 THEN 加工内容 END)[加工内容1]
,MAX(CASE 加工顺序 WHEN 2 THEN 加工内容 END)[加工内容2]
,MAX(CASE 加工顺序 WHEN 3 THEN 加工内容 END)[加工内容3]
,MAX(CASE 加工顺序 WHEN 4 THEN 加工内容 END)[加工内容4]
,MAX(CASE 加工顺序 WHEN 5 THEN 加工内容 END)[加工内容5]
,MIN(加工开始时间)开始时间
,是否全部完成
FROM 表2
GROUP BY 产品品号,是否全部完成
)T2 ON T1.产品品号=T2.产品品号
JOIN 表2 T3 ON T2.产品品号=T3.产品品号 AND T2.加工顺序MX=T3.加工顺序
------解决思路----------------------
SELECT
产品品号
,MAX(CASE WHEN 加工开始时间 IS NOT NULL THEN 加工顺序 END)加工顺序MX
,MAX(CASE 加工顺序 WHEN 1 THEN 加工内容 END)[加工内容1]
,MAX(CASE 加工顺序 WHEN 2 THEN 加工内容 END)[加工内容2]
,MAX(CASE 加工顺序 WHEN 3 THEN 加工内容 END)[加工内容3]
,MAX(CASE 加工顺序 WHEN 4 THEN 加工内容 END)[加工内容4]
,MAX(CASE 加工顺序 WHEN 5 THEN 加工内容 END)[加工内容5]
,MIN(加工开始时间)开始时间
,是否全部完成
FROM 表2
GROUP BY 产品品号,是否全部完成
这一串是行列转换。
其他的是JOIN
还有什么问题?
------解决思路----------------------
如小F大神所说,先行转列再表连接
你还说说你哪不明白吧,就一个先...再...~~
------解决思路----------------------
能够保证“是否全部完成”的一致性吗?如果能够保证,则:
select T2.客户,
T1.产品品号,
T3.当前加工顺序,
T3.当前加工内容,
T3.加工内容1,
T3.加工内容2,
T3.加工内容3,
T3.加工内容4,
T3.加工内容5,
T4.最新时间,
T4.检验状况,
T4.检验处理,
T4.是否全部完成,
T5.开始时间,
T6.完成时间
from (select distinct 产品品号 from 表2) T1
left join 表1 T2 on T1.产品品号=T2.产品品号
left join (select 产品品号,
MAX(case when 加工开始时间 is not null then 加工顺序 end)当前加工顺序,
SUBSTRING(MAX(case when 加工开始时间 IS not null then cast(加工顺序 as varchar(1))+'^'+加工内容 end),3,10)当前加工内容,
MAX(case when 加工顺序=1 then 加工内容 end) 加工内容1,
MAX(case when 加工顺序=2 then 加工内容 end) 加工内容2,
MAX(case when 加工顺序=3 then 加工内容 end) 加工内容3,
MAX(case when 加工顺序=4 then 加工内容 end) 加工内容4,
MAX(case when 加工顺序=5 then 加工内容 end) 加工内容5
from 表2 group by 产品品号
) T3 on T1.产品品号=T3.产品品号
left join (select a.*,
case when b.加工完成时间 is not null then b.加工完成时间 else b.加工开始时间 end 最新时间,
b.检验状况,
b.检验处理,
b.是否全部完成
from (select 产品品号,MAX(加工顺序)当前加工顺序 from 表2 where 加工开始时间 is not null group by 产品品号)a
left join 表2 b on a.产品品号=b.产品品号 and a.当前加工顺序=b.加工顺序
) T4 on T1.产品品号=T4.产品品号
left join (select 产品品号,MIN(加工开始时间)开始时间 from 表2 group by 产品品号) T5 on T1.产品品号=T5.产品品号
left join (select 产品品号,MAX(加工完成时间)完成时间 from 表2 where 是否全部完成='Y' group by 产品品号) T6 on T1.产品品号=T6.产品品号 ---- 需保证“是否全部完成”的一致性