22,301
社区成员




数据库:2008R2
CREATE TABLE #Test
(
UpdateFlag NVARCHAR(64),
AUpValue FLOAT,
AUpDiffDes NVARCHAR(1000),
ADownValue FLOAT,
ADownDiffDes NVARCHAR(1000),
BUpValue FLOAT,
BUpDiffDes NVARCHAR(1000),
BDownValue FLOAT,
BDownDiffDes NVARCHAR(1000),
CUpValue FLOAT,
CUpDiffDes NVARCHAR(1000),
CDownValue FLOAT,
CDownDiffDes NVARCHAR(1000)
)
INSERT INTO #Test
VALUES
('5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C',10,'无差异',9,'',22,'差异',3,'ddd',5,'',9,'无差异'),
('A94AC242-07CA-4910-821E-1B0B36C3CF65',8,'',9,'差异',1,'差异',3,'dsd',5,'ss',7,'无差异'),
('9E8A8E7F-3F69-4431-A1F6-99FDB63507A3',5,'差异',5,'',3,'差异',3,'dsd',5,'a',0,'无差异'),
('D643316A-387F-4495-A277-CD117228F22C',3,'无差异',7,'无差异',2,'差异',3,'',5,'',10,'无差异')
GO
CREATE TABLE #Category
(
CategoryID NVARCHAR(64),
CategoryName NVARCHAR(100),
CreateTime DATETIME
)
INSERT INTO #Category
SELECT 'A814AB45-E29B-4429-A580-8C4681DEFE5A','A上值',GETDATE() UNION
SELECT '7A3BC913-9CA5-4918-9033-F24A34CCDD40','A下值',GETDATE() UNION
SELECT '95C86313-0723-48EC-88E3-4EA8C43F57C3','B上值',GETDATE() UNION
SELECT 'A70A1399-5004-42B1-9205-4960F4271936','B下值',GETDATE() UNION
SELECT 'D635E8D8-A10D-452F-B721-1065A6F546DE','C上值',GETDATE() UNION
SELECT 'BB13EDFA-8D7F-49A0-8E0E-84859A62A762','C下值',GETDATE()
GO
CREATE TABLE #NewTest
(
id INT IDENTITY(1,1),
AreaCode NVARCHAR(64),
AreaValue FLOAT,
DiffDes NVARCHAR(1000),
UpdateFlag nvarchar(64)
)
GO
SELECT * FROM #Test
SELECT * FROM #NewTest
SELECT * FROM #Category
go
--想法是转换。开始的Test表结构设计有些变化,想变成下面的NewTest和Category表的结合
--现在要做的是把数据导过去
--NewTest
id AreaCode AreaValue DiffDes UpdateFlag
1 18DB08AE-4111-4875-8BBE-1FAD2BA26E93 10 无差异 5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C
2 D12CB4E1-39DE-4695-A98C-4764F561F20E 9 5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C
3 2ABD9AD5-42A4-49CD-A287-89F6A5D08DF8 22 差异 5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C
4 BA5BB495-015C-4F16-9CB7-DDF0604FE379 3 ddd 5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C
5 0EE1DD2F-601E-4BC7-A7B4-3A8415EE7ABA 5 5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C
6 AEAB1134-00E2-45C9-B9EA-E49759DD8409 9 无差异 5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C
INSERT INTO #NewTest
SELECT T2.CategoryID,T1.AUpValue,T1.AUpDiffDes,T1.UpdateFlag
FROM(SELECT AUpValue,AUpDiffDes,UpdateFlag,'A上值'CategoryName FROM #Test
UNION ALL SELECT ADownValue,ADownDiffDes,UpdateFlag,'A下值'CategoryName FROM #Test
UNION ALL SELECT BUpValue,BUpDiffDes,UpdateFlag,'B上值'CategoryName FROM #Test
UNION ALL SELECT BDownValue,BDownDiffDes,UpdateFlag,'B下值'CategoryName FROM #Test
UNION ALL SELECT CUpValue,CUpDiffDes,UpdateFlag,'C上值'CategoryName FROM #Test
UNION ALL SELECT CDownValue,CDownDiffDes,UpdateFlag,'C下值'CategoryName FROM #Test
)T1 JOIN #Category T2 ON T1.CategoryName=T2.CategoryName
SELECT * FROM #Test
SELECT * FROM #NewTest
SELECT * FROM #Category
CREATE TABLE #Test_Temp
(
UpdateFlag NVARCHAR(64),
AUpValue NVARCHAR(1000),
AUpDiffDes NVARCHAR(1000),
ADownValue NVARCHAR(1000),
ADownDiffDes NVARCHAR(1000),
BUpValue NVARCHAR(1000),
BUpDiffDes NVARCHAR(1000),
BDownValue NVARCHAR(1000),
BDownDiffDes NVARCHAR(1000),
CUpValue NVARCHAR(1000),
CUpDiffDes NVARCHAR(1000),
CDownValue NVARCHAR(1000),
CDownDiffDes NVARCHAR(1000)
)
INSERT INTO #Test_Temp
SELECT * FROM #Test
SELECT UpdateFlag,value FROM #Test_Temp
UNPIVOT
(
value FOR Col IN (AUpValue,ADownValue,BUpValue,BDownValue,CUpValue,CDownValue)
) AS u