SELECT和JOIN列不在Group by函数中

时间:2017-03-30 06:45:00

标签: sql sql-server join

我必须加入两个不同的表来获得我的结果。 表格资源'它很简单,而表格的尺寸。[代码]'其中包含一个具有不同值的列(即:

Code SILO GRADE OTHER 1 OTHER2

这就是为什么连接两次该列以获得两个名为GRADE和SILO的不同列的原因。

现在,我有一个查询,选择组内成绩的最大值,如下所示:

`SELECT 
R.[ID] -- If I inserted that here, it is not working obviously.
       -- This cannot But this is the additional column I need (see later)
 DD_SILO.[Value] DIR , 
 max(R.[GRADE]) GRADE_DIR
 FROM [Resource] R
LEFT JOIN 
Dimension DD_SILO ON  R.[ID] = DD_SILO.[ID] AND DD_SILO.[Code] = 'SILO'
   group by DD_SILO.[Value]' 

我需要的是,除了GRADE AND SILO之外,还有ID名称,它包含在[Resource]表中。 请注意[资源] .ID = [维度] .ID

我会用ROW_NUMBER()来解决问题,选择组中的最高级别,然后避免然后按'分组,但是因为查询必须插入更大的一个,所以需要太多时间跑。我正在使用Microsoft SQL Server 2016。

2 个答案:

答案 0 :(得分:0)

SELECT 
MAX(R.[ID]) as ID ,
 DD_SILO.[Value] DIR , 
 max(R.[GRADE]) GRADE_DIR
 FROM [Resource] R
LEFT JOIN 
Dimension DD_SILO ON  R.[ID] = DD_SILO.[ID] AND DD_SILO.[Code] = 'SILO'
   group by DD_SILO.[Value]

答案 1 :(得分:0)

您可以使用虚拟表格: -

`
select
     a.max_grade_silo,
     a.max_grade_value,
     (select max(r.id) 
        from [resource] r,
             [dimension] d
        where r.[ID] = d.[ID] and
              d.[CODE]= 'SILO' and
              r.[GRADE] = a.[max_grade_value] 
     ),
     max_grade_silo a
from
(SELECT 
     DD_SILO.[Value] DIR , 
     max(R.[GRADE]) GRADE_DIR
     FROM [Resource] R
    LEFT JOIN 
    Dimension DD_SILO ON  R.[ID] = DD_SILO.[ID] AND DD_SILO.[Code] = 'SILO'
       group by DD_SILO.[Value]
) temp_result (max_grade_silo, max_grade_value)
'

看看规范化表格可能会更好吗?