3

以下の2つのテーブルONE&TWOがあります

ONE           TWO

ID            ID  CODE  
-----         ---------
1             1    1
2             1    2
3             2    1
4             3    1  
5             3    2  
              3    3

出力が必要

ID    CODE  
----------  
1     2  
2     1  
3     3  
4     NULL  
5     NULL  

以下のクエリを使用しましたが、「 JOIN 演算子または MERGE ステートメントに関連付けられた ON 句が無効です」というエラーがスローされます。

SELECT  A.ID
       ,B.CODE
FROM   ONE A 
LEFT JOIN
       TWO B
ON     A.ID = B.ID
   AND B.CODE = (
                   SELECT 
                         MAX(Z.CODE)
                   FROM TWO Z
                   WHERE Z.ID = A.ID
            )
4

3 に答える 3

4

結合と集計を使用してこれを行うことができます (ロジックを正しく理解していれば)。

select ONE.id, max(TWO.CODE)
from ONE left outer join
     TWO
     on ONE.id = TWO.id
group by ONE.id;
于 2013-08-26T13:14:56.533 に答える
2

SQL-Server にもタグを付けたので、次を使用できますROW_NUMBER

WITH CTE AS
(
    SELECT ONE.ID,  TWO.CODE,
        RN = ROW_NUMBER() OVER (PARTITION BY ONE.ID ORDER BY TWO.CODE DESC)
    FROM ONE LEFT OUTER JOIN TWO
        ON ONE.ID=TWO.ID
)
SELECT  ID, CODE FROM CTE WHERE RN = 1

DEMO

于 2013-08-26T13:15:00.440 に答える
1
SELECT  A.ID
   ,B.CODE
FROM   ONE A 
LEFT outer JOIN
   (select id,max(code) CODE from two group by id) B
ON     A.ID = B.ID

私はこれがあなたが探しているものだと信じています....

于 2013-08-26T13:26:10.050 に答える