SQL 2字段合并

来源:百度知道 编辑:UC知道 时间:2024/05/26 18:12:22
表1
字段
A B C D
a 1 数学 A
b 2 语文 B
a 5 数学 C

如果当 AC列都一样时,要得到结果
A B C D
a 6 数学 A1 C5
b 2 语文 B
合并D列要求,D列+B,D列+B(相同的2列A,C)
他们类型都是不一样的,'u_f_GetD' 不是可以识别的 函数名。

假设全部字段都是Varchar类型的情况下,建立下的函数来生成D列的值
CREATE FUNCTION [dbo].[u_f_GetD]
(
@A varchar(20)
,@C Varchar(20)
)
RETURNS Varchar(4000)
AS
BEGIN
DECLARE @Result Varchar(4000)
SET @Result='' --默认返回值

--A,C字段值只有一条记录时,返回字段D的值
IF ((SELECT COUNT(*) FROM [表1] WHERE [FieldA]=@A AND [FieldC]=@C)<=1)
BEGIN
SELECT @Result = [FieldD] FROM [表1] WHERE [FieldA]=@A AND [FieldC]=@C
END

--如果存在2个以上的记录,则生成组合,D列+B列
ELSE
BEGIN
SELECT @Result = @Result + [FieldD] + [FieldB] + ' '
FROM [表1] WHERE [FieldA]=@A AND [FieldC]=@C
END
RETURN @Result

END
GO

使用以上函数进行查询:
SELECT [FieldA],[FieldB],[FieldC]
,[dbo].[u_f_GetD]([FieldA],[FieldC])
FROM [表1]

生成结果将会是:
A B C D
a 1 数学 A1 C5
b 2 语文 B
a 5 数学 A1 C5

如果要将AC列都一样的记录排除,可以使用AC列组合值建立查询后再过滤
SELECT [FieldA],[FieldB],[FieldC]
,[dbo].[u_f_GetD]([FieldA]