将不同表中的不同列组合到不同的表中

时间:2018-02-15 23:55:08

标签: sql sql-server

enter image description here

我需要组合3个表中的3个不同列,结果集应该是一个不同的表。

附在蓝色表格中是我的问题,黄色表格是我预期的答案。我如何获得预期的表格?

我不希望名称中的重复项为第1列。

任何帮助将不胜感激。

enter image description here

2 个答案:

答案 0 :(得分:0)

Full Outer Joins

这个问题并没有让我们继续下去,所以我几乎没有对数据做出任何假设。似乎并不是一个名字'表中没有3个表似乎代表完整的名称列表。所以,我要闭上眼睛,输入几个完整的外连接:

Select t1.name, t1.country, t2.food, t3.movie 
    from table1 t1
    full outer join table2 t2 on t1.name = t2.name
    full outer join table3 t3 on t3.name = t1.name

这将为您提供所有名称(不假设任何一个表需要包含完整列表),每个只列出一次(前提是它们不会出现在任何一个表中多次)以及与三个表中的任何一个表中的该名称相关联的任何数据。

<强>更新
所以这里有一个更新(见下面的评论),只用“是”和“#39”替换国家,食品和电影的名称。或者&#39; no&#39;。

Select 
        t1.name, 
        case when t1.country is null then 'no' else 'yes' end as country,
        case when t2.food is null then 'no' else 'yes' end as food,
        case when t3.movie is null then 'no' else 'yes' end as movie
    from table1 t1
    full outer join table2 t2 on t1.name = t2.name
    full outer join table3 t3 on t3.name = t1.name

...并使用通用Column1,Column2重写,以防出现问题:

Select 
        t1.Column1 as name, 
        case when t1.Column2 is null then 'no' else 'yes' end as country,
        case when t2.Column2 is null then 'no' else 'yes' end as food,
        case when t3.Column2 is null then 'no' else 'yes' end as movie
    from table1 t1
    full outer join table2 t2 on t1.Column1 = t2.Column1
    full outer join table3 t3 on t3.Column1 = t1.Column1

我希望这会有所帮助。

答案 1 :(得分:0)

所以我想出了一个问题的答案。

我使用了union函数来获得预期的结果。

基本上我有3个表,其中一个列名相同(数字)。 例如,700可以在表1和表3中,但不在表2中,701可以仅在表1中。

我使用了这个查询:

select Number, SUM(I) as Country, SUM(D) as Place, SUM(A) as City from 
(
SELECT distinct(number), CASE WHEN m.number IS NULL THEN 0 ELSE 1 END AS I,0 AS D, 0 AS A
FROM dbo.country M(NOLOCK) 
Union
SELECT distinct(number),0 as I,CASE WHEN D IS NULL THEN 0 ELSE 1 END AS D, 0 AS A
FROM dbo.Food F(NOLOCK)