2017-04-13 31 views
0

这里是我的查询:最大与内部联接需要在SQL Server的详细列

SELECT * 
FROM a 
INNER JOIN b ON b.id_a = a.id 
INNER JOIN c ON c.id_b = b.id 
INNER JOIN d ON d.id_c = c.id 
INNER JOIN e ON e.id = d.id_e 

我的问题是,它返回一些行这是excatly除了“C”表中的值相同。我需要采取'c'的一列的最大值,但我不知道如何。

什么这个查询返回例:

a.fields b.fields c.id c.gamut c.position d.fields e.fields 
-------------------------------------------------------------------------- 
    ...   ...  1  2  1    ...  ... 
    ...   ...  2  2  2    ...  ... 
    ...   ...  3  2  3    ...  ... 
    ...   ...  4  3  1    ...  ... 
    ...   ...  4  3  2    ...  ... 

我需要什么有:

a.fields b.fields c.id c.gamut c.position d.fields e.fields 
-------------------------------------------------------------------------- 
    ...   ...  3  2  3    ...  ... 
    ...   ...  4  3  2    ...  ... 

我需要为同色域最高位置。

信息:

  • “...”装置,用于表的列的值是相同的用于通过色域的每个行
+0

你的问题还不够清楚。请具体说明。 –

+0

不要忘记,没有适当的“where”子句的内部连接不是1-1关系,而是1-n,这就是为什么你得到a,b和d域的副本。请更具体地说明你想要达到的目标并提供一些模拟数据。 – rpd

+0

在我的查询中,我需要'c'表来获得最大(位置)的色域。我不知道如何用内连接来做到这一点。并且需要保持c.id与'd'表一起加入。 –

回答

2

这是ROW_NUMBER()功能的一个简单的应用:

;WITH Ordered AS (
SELECT *, 
    ROW_NUMBER() OVER (PARTITION BY c.gamut ORDER BY c.position desc) as rn 
FROM a 
INNER JOIN b ON b.id_a = a.id 
INNER JOIN c ON c.id_b = b.id 
INNER JOIN d ON d.id_c = c.id 
INNER JOIN e ON e.id = d.id_e 
) 
select * from Ordered where rn = 1 

(如果对于相同的gamut,有多个行具有相同的最大Position,则会选择一个ar任意一个。如果还有进一步的平局,请将其添加到ORDER BY。如果您的关系展现出来,切换到RANK()而非ROW_NUMBER()

0

你好,请试试这个,让我知道无论是工作或没有,如果不是,请提供给我的表

架构和数据
SELECT a.fields,b.fields,max(c.id),c.gamut,max(c.position),d.fields,e.fields 
FROM a 
INNER JOIN b ON b.id_a = a.id 
INNER JOIN c ON c.id_b = b.id 
INNER JOIN d ON d.id_c = c.id 
INNER JOIN e ON e.id = d.id_e 
group by a.fields,b.fields,c.gamut,d.fields,e.fields