具有不同列的T-SQL联合

时间:2014-08-14 15:29:24

标签: sql sql-server

我有两张包含以下数据的表格:

[Animals].[Males]
DataID                               HerdNumber HerdID  NaabCode
e46fff54-a784-46ed-9a7f-4c81e649e6a0 4          'GOLDA' '7JE1067'
fee3e66b-7248-44dd-8670-791a6daa5d49 1          '35'    NULL

[Animals].[Females]
DataID                               HerdNumber HerdID   BangsNumber
987110c6-c938-43a7-a5db-194ce2162a20 1          '9'      'NB3829483909488'
1fc83693-9b8a-4054-9d79-fbd66ee99091 2          'NATTIE' 'ID2314843985499'

我想将这些表合并到一个如下所示的视图中:

DataID                               HerdNumber HerdID   NaabCode  BangsNumber
e46fff54-a784-46ed-9a7f-4c81e649e6a0 4          'GOLDA'  '7JE1067' NULL
fee3e66b-7248-44dd-8670-791a6daa5d49 1          '35'     NULL      NULL
987110c6-c938-43a7-a5db-194ce2162a20 1          '9'      NULL      'NB3829483909488'
1fc83693-9b8a-4054-9d79-fbd66ee99091 2          'NATTIE' NULL      'ID2314843985499'`

当我使用UNION关键字时,SQL Server生成了一个将NaabCodeBangsNumber合并为一列的视图。我在常规SQL上的一本书提出了UNION CORRESPONDING语法,如下所示:

SELECT *
FROM [Animals].[Males]
UNION CORRESPONDING (DataID, HerdNumber, HerdID)
SELECT *
FROM [Animals].[Females]`

但是,当我键入此SQL Server时,"' CORRESPONDING''"

附近的语法不正确

有谁能告诉我如何在T-SQL中实现我想要的结果和/或如何使用UNION CORRESPONDING

4 个答案:

答案 0 :(得分:8)

你可以这样做:

SELECT DataID, HerdNumber, HerdID, NaabCode, NULL as BangsNumber
FROM [Animals].[Males]
UNION ALL
SELECT DataID, HerdNumber, HerdID, NULL as NaabCode, BangsNumber
FROM [Animals].[Females]

<强> SQL Fiddle

我不记得SQL Server支持corresponding语法,但我可能错了。
无论如何,此查询将为男性的null列选择BangsNumber,为女性选择NaabCode列,同时正确选择其他所有内容。

答案 1 :(得分:2)

只需明确列出列{/ 1}}:

union

注意:您应该使用select DataID, HerdNumber, HerdID, NaabCode, NULL as BangsNumber from Animals.Males union all select DataID, HerdNumber, HerdID, NULL, BangsNumber from Animals.Females; 代替union all(假设没有单个动物是男性和女性)。 union会导致性能开销,以消除重复项。

答案 2 :(得分:0)

SELECT DataID, HerdNumber, HerdID, NaabCode, '' asBangsNumber
  FROM [Animals].[Males] 
UNION ALL
 SELECT DataID, HerdNumber, HerdID, '' as NaabCode, BangsNumber
  FROM [Animals].[Females]

答案 3 :(得分:0)

您需要在每个选择中说明列

SELECT DataID, HerdNumber, HerdID
FROM [Animals].[Males]
UNION 
SELECT DataID, HerdNumber, HerdID
FROM [Animals].[Females]