在表SQL Server 2008中追加具有唯一键值的新行



我有一个id_test1表,其中包含以下示例数据:

P_Key   Name    phone   address     zip
1   a   123 NCR 1002
2   b   456 LKO 12045
3   c   789 BLR 3652
4   d   987 DLI 4528
5   e   654 NCR 7854

我有另一个表id_test2,里面有这个数据:

P_Key   Name    phone   address     zip
1   x   985 NCR 1002
2   y   562 LKO 12045
3   z   365 BLR 3652
4   q   362 DLI 4528
5   w   124 NCR 7854

我想将这些表合并为一个名为id_test的新表。但是p_key列应该是唯一的。我想将这两个表的数据合并为一个表,如下所示:

P_Key   Name    phone   address     zip
1   a   123 NCR 1002
2   b   456 LKO 12045
3   c   789 BLR 3652
4   d   987 DLI 4528
5   e   654 NCR 7854
6   x   985 NCR 1002
7   y   562 LKO 12045
8   z   365 BLR 3652
9   q   362 DLI 4528
10  w   124 NCR 7854

我曾在Oracle数据库工作过,我是SQL Server 2008的新手。请提供你的建议。谢谢

在SQL中,有一个整洁的小工具,叫做if exists。

它并不完美,但对于新手程序员来说,它工作得很好。

既然我不理解你的结构,就假设你有一个简单的ID和Name表。ID必须是唯一的。

You want to add
ID=1, Name=A
ID=2, Name=B
ID=1, Name=C
You want it to end up with:
ID=1, Name=A:C
ID=2, Name=B

您的SQL看起来像:

@ID = <id of thing you are inserting>
@NAME = <name of thing you are inserting>
if exists (select * from table where ID = @ID)
BEGIN
   UPDATE table set NAME = NAME + ',' + @NAME where ID = @ID
END
else
BEGIN
   INSERT values (@ID, @NAME) into table
END

我的SQL语法可能需要一些轻微的编辑,但您应该了解这个想法。例如,我怀疑我是否有连接varchars的正确语法。

如果在新表中为p_Key使用标识列,则以下查询将执行任务

INSERT INTO id_test
(
    Name,phone,address,zip
)
SELECT Name,phone,address,zip FROM id_test1 ORDER BY P_Key
INSERT INTO id_test
(
    Name,phone,address,zip
)
SELECT Name,phone,address,zip FROM id_test2 ORDER BY P_Key

如果不使用标识列,则可以使用row_number 使用以下查询

SELECT 
    ROW_NUMBER()OVER(PARTITION BY P_Key ORDER BY P_Key,Name),T.Name,T.phone,T.address,T.zip
FROM
(
    SELECT P_Key,Name,phone,address,zip FROM id_test1 
    UNION ALL
    SELECT P_Key,Name,phone,address,zip FROM id_test2 
)T

最新更新