表,并要求输出 SQL,自加入3连接表
我使用的是国家Instrumets TestStand中默认数据库设置。我试图简化上图中的数据库布局。
我可以设法通过一些相当“复杂”的sql来获得我想要的,并且它非常缓慢。
我认为有一个更好的办法,然后我偶然发现了自我加入。基本上我想要的是从一个“序列号”中获取来自多个不同行的数据值。
我的问题是结合自我加入与我的表的“一般”加入。
此刻我正在使用Access Databdase。
表,并要求输出 SQL,自加入3连接表
我使用的是国家Instrumets TestStand中默认数据库设置。我试图简化上图中的数据库布局。
我可以设法通过一些相当“复杂”的sql来获得我想要的,并且它非常缓慢。
我认为有一个更好的办法,然后我偶然发现了自我加入。基本上我想要的是从一个“序列号”中获取来自多个不同行的数据值。
我的问题是结合自我加入与我的表的“一般”加入。
此刻我正在使用Access Databdase。
这会给你你的目标与样本数据输出:
with x as (
select
row_number() over (partition by t1.Serial order by t1.Serial) as [RN],
t1.Serial,
case when t3.Sub_Test_Name = 'AAA' then t3.Value end as [AAA],
case when t3.Sub_Test_Name = 'BBB' then t3.Value end as [BBB],
case when t3.Sub_Test_Name = 'CCC' then t3.Value end as [CCC],
case when t3.Sub_Test_Name = 'DDD' then t3.Value end as [DDD]
from Table_1 t1
inner join Table_2 t2 on t2.Table_1_Id = t1.Id
inner join Table_3 t3 on t3.Table_2_Id = t2.Id
)
select
x.Serial,
AAA.AAA,
BBB.BBB,
CCC.CCC,
DDD.DDD
from x
left outer join x AAA on AAA.Serial = x.Serial and AAA.RN = x.rn + 0
left outer join x BBB on BBB.Serial = x.Serial and BBB.RN = x.rn + 1
left outer join x CCC on CCC.Serial = x.Serial and CCC.RN = x.rn + 2
left outer join x DDD on DDD.Serial = x.Serial and DDD.RN = x.rn + 3
where x.rn = 1
这将使用自我任命为你提到的(在那里你看到x
被甩加入到自己多次在最后的选择声明)。
我有意添加了额外的列CCC
和DDD
,所以很容易看出你如何为更大的数据集构建这个列,增加每个连接的row_number偏移量。
我已经在SQL Fiddle中测试过了,欢迎您随时随地使用它。如果您需要应用其他过滤器,则应将您的where
子句放置在CTE内。
请注意,您使用这种查询有效地转移数据(除非我们不汇总任何内容,因此我们无法使用内置的PIVOT
选项)。这种方法和真正的主要缺点是你必须手动指定每列标题与CTE自己的CASE
语句,并在最后的选择语句左加入。在大中型数据集中这可能会很难处理,所以最适合在结果中只有少量已知列标题的情况下使用。
请包括您的表格结构和输出(连同样本数据)作为问题的一部分,而不是链接到图像。如果问题/答案包含与相关信息的死链接,将来对其他人来说将毫无用处。 http://stackoverflow.com/help/how-to-ask –
另外,请包括您迄今为止尝试过的内容。 –
你能告诉我们你有什么? – GabrielVa