22,209
社区成员
发帖
与我相关
我的任务
分享
Alter Procedure RRRRR -------- 'B00'
@PP char(6)='H00'
As
Begin
Create Table #RRR(Provide char(50))
Select DefectCode,SubString(DefectCode,1,1)+Rtrim(right(Rtrim(DefectCode),2)) as Num,Sum(DefectQty) as DefectQty
into #PPP
From Qc_DefectDtl ------------某一製程的缺點項目及缺點數
Where Dotime='2007-01-18' And Defectcond ='RE' And ProvideCode is not null and ProvideCode=@PP
Group By ProvideCode,Dotime,DefectCode
Select
IPQCDefectCode,
Case When Len(IPQCDefectName)>16 Then SubString(IPQCDefectName,1,16)
Else IPQCDefectName End as IPQCDefectName
Into #IPQCDefectName -------------------把缺點名稱長度大於16的截為16位
From IPQCDefectClass
Declare @ProvideCode char(10)
Declare @DefectCode char(10)
Declare @Num Char(10)
Declare @SQL varchar(500)
Declare @SQLL varchar(500)
Declare rps_cursor Cursor For ------某一製程的缺點及對應的附加字段
Select DefectCode,SubString(DefectCode,1,1)+Rtrim(right(Rtrim(DefectCode),2)) as Num From Qc_DefectDtl
Where Dotime='2007-01-18' And Defectcond ='RE' And ProvideCode is not null and ProvideCode=@PP
Group By ProvideCode,Dotime,DefectCode
Open rps_cursor
Fetch Next From rps_cursor into @DefectCode,@Num
WHILE @@FETCH_STATUS = 0 --------------------動態增加字段
Begin
Select @SQL=' Alter Table #RRR Add ['+@DefectCode+'] varchar(100) Null'
Select @SQL=@SQL+' Alter Table #RRR Add ['+@num+'] varchar(100) '
Exec(@SQL)
Fetch Next From rps_cursor into @DefectCode,@Num
End
Close rps_cursor
---Deallocate rps_cursor
Insert into #RRR(Provide)
Values(@PP)
Open rps_cursor
Fetch Next From rps_cursor into @DefectCode,@Num
WHILE @@FETCH_STATUS = 0
Begin --------------------動態更新表字段內容
Select @SQLL='Update t1 Set ['+@Num+']=t2.DefectQty From #RRR t1,#PPP t2 Where '''+@DefectCode+'''=t2.DefectCode'
Exec(@SQLL)
Select @SQLL=' update t1 set ['+@DefectCode+']= t2.IPQCDefectName From #RRR t1, #IPQCDefectName t2 where '''+@DefectCode+'''=t2.IPQCDefectCode '
Exec(@SQLL)
---- Select @DefectCode,@Num
Fetch Next From rps_cursor into @DefectCode,@Num
End
Close rps_cursor
Deallocate rps_cursor
Select * From #RRR
End
SELECT *
FROM
(SELECT 项目='name',country,[name] as col from test
union all
select 'addr',country,[addr] from test ) p
PIVOT
( max (col)
FOR country IN ([cn],[us],[eu],[jp] )
)AS unpvt
--重新整理一下结果.
create table test ( country varchar(20), [name] varchar(20), addr varchar(20) )
insert into test select 'CN','wang','wabuf'
insert into test select 'US','zhang','mnt'
insert into test select 'EU','li','wqwe'
insert into test select 'JP','sun','wett'
SELECT * FROM
(
SELECT 项目,country,项目情况 FROM
(SELECT country,name,addr FROM Test) p
UNPIVOT
(项目情况 FOR 项目 IN (name,addr))AS unpvt
) T
PIVOT
(MAX(项目情况) FOR country in ([CN],[US],[EU],[JP]))AS pt
drop table test
/*
项目 CN US EU JP
------------- ----- ---- -----
addr wabuf mnt wqwe wett
name wang zhang li sun
(2 行受影响)
*/
create table test ( country varchar(20), [name] varchar(20), addr varchar(20) )
insert into test select 'CN','wang','wabuf'
insert into test select 'US','zhang','mnt'
insert into test select 'EU','li','wqwe'
insert into test select 'JP','sun','wett'
SELECT * FROM
(
SELECT 项目,country,项目情况 FROM
(SELECT country,name,addr FROM Test) p
UNPIVOT
(项目情况 FOR 项目 IN (name,addr))AS unpvt
) T
PIVOT
(MAX(项目情况) FOR country in ([CN],[US],[EU],[JP]))AS pt
drop table test
/*
项目 CN US EU JP
-------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- -------------------- --------------------
addr wabuf mnt wqwe wett
name wang zhang li sun
(2 行受影响)
*/
SELECT addr,cn ,us,eu,jp
FROM (SELECT country ,NAME,addr FROM #test) p
PIVOT
( MAX
([name]) FOR country IN (cn ,us,eu,jp)
) AS pvt
addr cn us eu jp
------------------------- -------------------- -------------------- -------------------- --------------------
mnt NULL zhang NULL NULL
wabuf wang NULL NULL NULL
wett NULL NULL NULL sun
wqwe NULL NULL li NULL