sho*_*ave 0 sql sql-server union merge
我有多个涉及许多表和联接的选择语句。所有选择语句具有相同的标题。我正在尝试将所有这些组合到单个结果集中。那么哪种方法是更好的SQL UNION还是MERGE?我知道UNION是A + B。因此,如果表A中的列为NULL,而表B中的列具有值,那么UNION会给我两行吗?因此,如果我想根据ID将所有行合并为单个行,应该使用MERGE吗?我可以选择在SQL或SSIS中执行此操作。
SELECT ID, NAME, VitalName as VitalName FROM TABLE A
UNION
SELECT ID, NAME, VitalReadings as VitalName FROM TABLE B
Run Code Online (Sandbox Code Playgroud)
表A
+----+------+-----------+
| ID | Name | VitalName |
+----+------+-----------+
| 1 | AAA | HeartRate |
| 2 | | Systolic |
| 3 | | Diastolic |
+----+------+-----------+
Run Code Online (Sandbox Code Playgroud)
表B
+----+------+---------------+
| ID | Name | VitalReadings |
+----+------+---------------+
| 1 | AAA | HeartRate |
| 2 | BBB | Systolic |
+----+------+---------------+
Run Code Online (Sandbox Code Playgroud)
预期结果
+----+------+---------------+
| ID | Name | VitalName |
+----+------+---------------+
| 1 | AAA | HeartRate |
| 2 | BBB | Systolic |
| 3 | | Diastolic |
+----+------+---------------+
Run Code Online (Sandbox Code Playgroud)
UNION和MERGE完全不同的概念,两者没有解决您的问题。但是可以FULL JOIN用来做这个。
DECLARE @TableA TABLE (ID INT, Name VARCHAR(10), VitalName VARCHAR(10))
INSERT INTO @TableA VALUES
(1,'AAA','HeartRate'),
(2,NULL,'Systolic'),
(3,NULL,'Diastolic')
DECLARE @TableB TABLE ( ID INT, Name VARCHAR(10), VitalReadings VARCHAR(10))
INSERT INTO @TableB VALUES
(1,'AAA','HeartRate'),
(2,'BBB','Systolic')
SELECT
A.ID,
COALESCE(A.Name, B.Name) Name,
COALESCE(A.VitalName, B.VitalReadings) VitalName
FROM
@TableA A
FULL JOIN @TableB B ON A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)
结果:
ID Name VitalName
----------- ---------- ----------
1 AAA HeartRate
2 BBB Systolic
3 NULL Diastolic
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5095 次 |
| 最近记录: |