我正在开发一个项目,该项目涉及从一个表中检索数据,并从某些字段中解析出一些信息并将它们放到另一个表的其他字段中。这涉及一些LEFT,SUBSTRING和RIGHT函数。
我的问题是当我运行查询时,变量返回源表的最后一个值,并将其作为目标表中字段中每行的值。但是,其他字段为每行返回不同的值,这是所需的。
SQL版本是MSSQL Server 2012
以下是代码(表格和字段名称已更改,以简洁明了)
USE [databaseName]
DECLARE @Year varchar(5);
DECLARE @Type varchar(2);
DECLARE @CaseType varchar(20);
DECLARE @ParsedHeader varchar(20);
SELECT @Year=SUBSTRING([tableSource].[Header],2,5)
FROM [tableSource];
SELECT @Type=LEFT([tableSource].[Header],2)
FROM [tableSource];
SELECT @CaseType=CASE(WHEN @Type='AA' THEN 'Type AA'
WHEN @Type='BB' THEN 'Type BB'
WHEN @Type='CC' THEN 'Type CC'
)
END;
SELECT @ParsedHeader =LEFT([tableSource].[OtherHeader],2)
+' '
+SUBSTRING([tableSource].[OtherHeader],3,7)
+'-'
RIGHT([tableSource].[OtherHeader],3)
FROM [tableSource];
INSERT INTO [tableTarget](
Name,
Foo,
Bar,
Year,
Type,
CaseType,
ParsedHeader)
SELECT(
Name,
Foo,
Bar,
@Year,
@Type,
@CaseType,
@ParsedHeader
)
FROM [tableSource];
运行时,我得到一组结果,其中Year,Type,CaseType和ParsedHeader(可以为NULL,最后一条记录为NULL)字段始终从sourceTable中的最后一条记录中提取。 我在这里的逻辑中显然遗漏了一些东西。任何帮助表示赞赏。
答案 0 :(得分:2)
您必须将所有内容放在SELECT
操作中使用的查询的INSERT
子句中:
INSERT INTO [tableTarget](Name, Foo, Bar, Year, Type, CaseType, ParsedHeader)
SELECT Name, Foo, Bar,
SUBSTRING([tableSource].[Header],2,5), -- @Year
LEFT([tableSource].[Header],2), -- @Type
CASE
WHEN @Type='AA' THEN 'Type AA'
WHEN @Type='BB' THEN 'Type BB'
WHEN @Type='CC' THEN 'Type CC'
END, -- @CaseType
LEFT([tableSource].[OtherHeader],2)
+' '
+ SUBSTRING([tableSource].[OtherHeader],3,7)
+'-'
+ RIGHT([tableSource].[OtherHeader], 3) -- @ParsedHeader
FROM [tableSource];