我有一个包含以下示例数据的表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的新手。请提供您的建议。谢谢!
发布于 2015-12-09 12:51:38
在SQL中,有一个整洁的小工具,叫做if exists。
它不是完美的,但对于初学者来说,它工作得很好。
由于我不理解您的结构,让我们假设您有一个简单的ID和姓名表。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。
发布于 2015-12-11 17:15:51
如果在新表中使用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如果您没有使用identity列,则可以使用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
)Thttps://stackoverflow.com/questions/34170776
复制相似问题