我有一个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