我在连接两个不同表中的两列时遇到问题。
场景是:我有一个包含11列的表A和另一个包含6列的表B.
两个表中都存在列名SAMPLE1。但是,来自第一个表A的SAMPLE2和来自第二个表B的ABC具有相同的值但具有不同的列名。与SAMPLE3和DEF相同。现在我想将这些列连接到一个列(由两个表中的数据组成),其余列也应该出现在该最终表中。
示例:
表A
SAMPLE1 SAMPLE2 SAMPLE3 .........SAMPLE 11 (Total 11 columns in this table)
US 75.2 US1_US NULL
INDIA 71 I3_INDIA NULL
UK 1851.23 UK1_UK NULL
表B
SAMPLE1 ABC DEF............. XYZ (Total 6 columns in this table)
CHINA 123.2 C1_CHINA 2
JAPAN 1.1 J1_JAPAN 2
GERMANY 10.2314 G1_GERMANY 2
SINGAPORE 100.22 S1_SINGAPORE 2
现在我希望看到这样的输出:
SomeTable
SAMPLE1 SOMENAME1 SOMENAME2..SAPMLE 11 ABC DEF ..... SOMENAME3
US 75.2 US1_US NULL NULL NULL NULL
INDIA 71 I3_INDIA NULL NULL NULL NULL
UK 1851.23 UK1_UK NULL NULL NULL NULL
CHINA 123.2 C1_CHINA NULL NULL NULL 2
JAPAN 1.1 J1_JAPAN NULL NULL NULL 2
GERMANY 10.2314 G1_GERMANY NULL NULL NULL 2
SINGAPORE 100.22 S1_SINGAPORE NULL NULL NULL 2
简而言之:
选择 (SAMPLE1(来自表A)+ SAMPLE1(来自表B))AS SAMPLE1, (SAMPLE2 + ABC)AS SOMENAME1, (SAMPLE3 + DEF)作为SOMENAME2, A.SAMPLE4,A.SAMPLE5,..., B.GHI,B.JKL,...... (A.SAMPLE11 + B.XYZ)作为SOMENAME3
我使用了联盟,但没有用。
select SAMPLE1,SAMPLE2,SAMPLE3,...,SAMPLE 11 from TABLE A
UNION
SELECT SAMPLE1, ABC, DEF, ...., XYZ FROM TABLE B
现在我收到了错误消息:
Msg 205,Level 16,State 1,Line 1
所有使用UNION组合的查询, INTERSECT或EXCEPT运算符必须具有 相同数量的表达式 他们的目标清单。
我使用了union,coalesce,full outer join(以下所有建议或答案)
请帮我写代码。实际上我需要在select语句中使用该代码。也可以使用临时表或case语句等。
谢谢, Shashra
答案 0 :(得分:2)
您可能正在寻找join
,例如:
select a.sample1
, a.sample2
, b.abc
, b.def
... etc ...
from TableA as a
full outer join
TableB as b
where a.sample1 = b.sample1
答案 1 :(得分:2)
使用FULL OUTER连接两个表(保留两个表中不存在的数据),然后使用COALESCE从任何表中获取公共SAMPLE1列。
SELECT COALESCE(A.SAMPLE1, B.SAMPLE1) SAMPLE1,
A.SAMPLE2,
A.SAMPLE3,
...
A.SAMPLE11,
B.ABC,
B.DEF,
...
B.XYZ
FROM table1 A FULL OUTER JOIN table2 B on A.SAMPLE1 = B.SAMPLE1
参考文献:MSDN - Using Outer Joins / COALESCE
答案 2 :(得分:0)
尝试使用它
表1包含5列
从table1中选择col1,col2 ... col5
表2包含3列
从table1中选择col1,col2,col3
查询
从table1中选择col1,col2,col3,col4,col5 联盟 从table1
中选择col1,col2,col3,'',''