求大神帮忙

和永恒有關 2015-05-14 10:40:22

数据库: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
...全文
149 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-05-14
  • 打赏
  • 举报
回复
有两列,加上,列名是英文,而那边的值是中文,不会比较方便
引用 6 楼 yuandongze 的回复:
这个可以用 UNPIVOT 做吗
和永恒有關 2015-05-14
  • 打赏
  • 举报
回复
引用 2 楼 ky_min 的回复:
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
这个可以用 UNPIVOT 做吗
和永恒有關 2015-05-14
  • 打赏
  • 举报
回复
引用 4 楼 yangb0803 的回复:
二楼得出的 AreaCode 值 就是#Category表的CategoryID值 , 与需求中的 AreaCode 值不一样的, 结果中的这个 AreaCode 值,是怎么得来的?
我的错,写错了 areacode值 就是 category的categoryid。
道玄希言 2015-05-14
  • 打赏
  • 举报
回复
二楼得出的 AreaCode 值 就是#Category表的CategoryID值 , 与需求中的 AreaCode 值不一样的, 结果中的这个 AreaCode 值,是怎么得来的?
道玄希言 2015-05-14
  • 打赏
  • 举报
回复
額, AreaCode 的值是怎么得出来的?
还在加载中灬 2015-05-14
  • 打赏
  • 举报
回复
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
和永恒有關 2015-05-14
  • 打赏
  • 举报
回复
我贴的想要的结果只贴出ID是5A3C87DB-3CCD-4C7B-B2CA-D77BDCD52D9C 不是全部哈,这个没写全,没大关系。意思没表达错就ok
还在加载中灬 2015-05-14
  • 打赏
  • 举报
回复
用UNPIVOT 只能转出一列,要弄成两列,还得行转列或,表连接,你的这个需求,用UNPIVOT真的不方便
和永恒有關 2015-05-14
  • 打赏
  • 举报
回复
引用 7 楼 ky_min 的回复:
有两列,加上,列名是英文,而那边的值是中文,不会比较方便
引用 6 楼 yuandongze 的回复:
这个可以用 UNPIVOT 做吗
恩,列类型不统一是不行,要是这样呢 可是这样我只能弄出前两列,后边不知道怎么弄。


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

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧