我有3个表名为A,B和C.表A有列a。表B列a,b。表C列a,c。这些表中包含类似下面的数据:SQL JOIN或UNION还是什么?
我想从A,B,C中的所有数据,其中a = 1
我的期望输出应该如下:
但我从SSMS得到的结果如下:
我应该如何重构我的SQL来获得我想要的输出?
例如我不想在列中重复的值
我有3个表名为A,B和C.表A有列a。表B列a,b。表C列a,c。这些表中包含类似下面的数据:SQL JOIN或UNION还是什么?
我想从A,B,C中的所有数据,其中a = 1
我的期望输出应该如下:
但我从SSMS得到的结果如下:
我应该如何重构我的SQL来获得我想要的输出?
例如我不想在列中重复的值
您需要加入这些值,但不仅在a
值上,而且在该位置上。 SQL表格表示无序集合。我将假定b
和c
列表示排序。
select a.a, b.b, c.c
from (select a.*, row_number() over (order by a) as seqnum
from a
) a full outer join
(select b.*, row_number() over (partition by a order by b) as seqnum
from b
) b
on a.a = b.a and a.seqnum = b.seqnum full outer join
(select c.*, row_number() over (partition by a order by c) as seqnum
from c
) c
on c.a = coalesce(a.a, b.a) and c.seqnum = coalesce(a.seqnum, b.seqnum)
where coalesce(a.a, b.a, c.a) = 1;
*“我不想在列中重复值”*您想要一个非常不寻常的东西,我认为在SQL中创建所需的输出是困难的和不可能的。你能解释一下你正在操作的数据,它是如何关联的,以及为什么这个特定的输出格式必须是SQL查询的结果? – Tomalak 2014-12-04 11:32:23
@Tomalak请看看我接受的** @ Gordon Linoff **的回答。可能是那**难**。但**不可能**? – autopilot 2014-12-06 03:21:17
“不可能”取决于所使用的数据库服务器。你没有回答我的问题。我真的很想知道这是什么。对我来说,这看起来像一个数据库设计错误和一般滥用关系数据库范例。 – Tomalak 2014-12-06 05:17:11