Sql 子查询上的联接

Sql 子查询上的联接,sql,sql-server,join,Sql,Sql Server,Join,我试图找到binnum的不同值。但是,我需要将origrec保留在select中,因为它是唯一的id。只要有一个origrec值绑定到不同的bin,origrec值是什么并不重要 我正在尝试在联接中执行此操作。然而,在执行子查询内部联接时,我似乎仍然获得了所有的值。我错在哪里?纠正这一点的最佳方法是什么 完整代码: SELECT distinct d.BINNUM , d.LOCATIONNAME , d.LOCATIONTYPE , d.ORIGREC FROM DL

我试图找到binnum的不同值。但是,我需要将origrec保留在select中,因为它是唯一的id。只要有一个origrec值绑定到不同的bin,origrec值是什么并不重要

我正在尝试在联接中执行此操作。然而,在执行子查询内部联接时,我似乎仍然获得了所有的值。我错在哪里?纠正这一点的最佳方法是什么

完整代码:

SELECT distinct d.BINNUM
    , d.LOCATIONNAME
    , d.LOCATIONTYPE
    , d.ORIGREC 
FROM DLOCATION D 
inner join 
( 
    SELECT distinct d1.binnum 
    FROM dlocation d1 
    GROUP BY d1.binnum
) as D1 On d.binnum = d1.binnum
第一个问题:

SELECT distinct d.BINNUM,d.LOCATIONNAME,d.LOCATIONTYPE,d.ORIGREC FROM DLOCATION D
将返回:

BINNUM  LOCATIONNAME    LOCATIONTYPE    ORIGREC
1       Bruker          RawMaterial     31
1       Bruker          RawMaterial     32
200     WetChem         RawMaterial     33
200     WetChem         RawMaterial     34
555     WetChem         RawMaterial     19
555     WetChem         RawMaterial     21
555     WetChem         RawMaterial     23
555     WetChem         RawMaterial     30
998     WetChem         RawMaterial     26
1002    Forage Cooler   Forage          27
2008    XRF Press       International   29
2009    Long Term       International   28
第二个问题:

SELECT distinct d1.binnum FROM dlocation d1 GROUP BY d1.binnum
将返回:

BINNUM
1
200
555
998
1002
2008
2009
为什么内部联接仍然给出这两者之间的所有结果

BINNUM  LOCATIONNAME    LOCATIONTYPE    ORIGREC
1       Bruker          RawMaterial     31
1       Bruker          RawMaterial     32
200     WetChem         RawMaterial     33
200     WetChem         RawMaterial     34
555     WetChem         RawMaterial     19
555     WetChem         RawMaterial     21
555     WetChem         RawMaterial     23
555     WetChem         RawMaterial     30
998     WetChem         RawMaterial     26
1002    Forage Cooler   Forage          27
2008    XRF Press       International   29
2009    Long Term       International   28
我如何才能只获取第二个查询中看到的BinNum值,使其看起来像这样

BINNUM  LOCATIONNAME    LOCATIONTYPE    ORIGREC
1       Bruker          RawMaterial     31
200     WetChem         RawMaterial     33
555     WetChem         RawMaterial     19
998     WetChem         RawMaterial     26
1002    Forage Cooler   Forage          27
2008    XRF Press       International   29
2009    Long Term       International   28

一些基本的聚合可以做到这一点。这里也不需要子查询。除非您有区分大小写的排序规则,否则DLOCATION和DLOCATION实际上是不同的表。假设你不是这样,这可以大大简化

SELECT d.BINNUM
    , d.LOCATIONNAME
    , d.LOCATIONTYPE
    , MIN(d.ORIGREC)
FROM DLOCATION D 
GROUP BY d.BINNUM
    , d.LOCATIONNAME
    , d.LOCATIONTYPE

取出原始列?查询中有distinct,这些行中的值不同。此外,在子查询中,您有distinct和group by。这是多余的。我需要上面描述的ORIGREC列。这是因为我在软件中工作,该软件要求本专栏始终存在。好的。那么在您的查询中,您想要哪一个?MIN,MAX?只要我能清楚地列出一个BINNUM和任何绑定到其中一个BINNUM的origrec,那就没关系了。您可以参考问题中显示的最后一个输出示例。它看起来似乎过于复杂了。谢谢你的澄清:)很高兴这对你有用。有时,只需要第二个人看一眼就可以了。:)