0

私は現在この出力を持っています:

ID     Name             Seq
---    -----            ----
82     Morris, Allan    1
82     Morris, Allan    2
82     Morris, Allan    3
82     Morris, Cynthia  1
82     Morris, Shaun    2
82     Morris, Sarah    3

しかし、これは望ましい出力です。

ID     Name             Seq
---    -----            ----
82     Morris, Allan    0
82     Morris, Cynthia  1
82     Morris, Shaun    2
82     Morris, Sarah    3

これが私の現在のクエリです:

SELECT C.ID AS ID, C.Name AS Name, COALESCE(D.Seq, 0) AS Seq
FROM CMSTR C
LEFT JOIN DMSTR D ON D.ID = C.ID
UNION
SELECT C.ID AS ID, D.Name AS Name, COALESCE(D.Seq, 0) AS Seq
FROM CMSTR C
LEFT JOIN DMSTR D ON D.ID = C.ID

そして、ここにテーブル構造があります:

CMSTR

ID     Name
---    -----
82     Morris, Allan

DMSTR

ID     Name             Seq
---    -----            ----
82     Morris, Cynthia  1
82     Morris, Shaun    2
82     Morris, Sarah    3

これは非常に単純なクエリのようですが、目的の出力を実現する方法がわかりません。助けてください!

*編集*

私は最初に次のクエリを使用してみました:

SELECT C.ID, (CASE WHEN D.Seq = 0 OR D.Seq IS NULL
                   THEN C.Name
                   ELSE C.Name
              END) AS Name,
       COALESCE(D.Seq, 0) AS Seq
FROM CMSTR C
LEFT JOIN DMSTR D ON D.ID = C.ID

残念ながら、上記を使用すると、親を完全に除外して、依存する名前のみが返されます。

4

2 に答える 2

0

私があなたを正しく理解していれば (そして、私が理解したかどうかは本当にわかりません)、このクエリはあなたが望むものを提供するはずです:

SELECT  C.ID AS ID, 
        C.Name AS Name, 
        COALESCE(D.Seq-1, 0) AS Seq
FROM CMSTR C
LEFT JOIN ( SELECT ID, MIN(Seq) Seq
            FROM DMSTR
            GROUP BY ID) D 
    ON D.ID = C.ID
UNION
SELECT  ID, 
        Name, 
        Seq
FROM DMSTR 
于 2013-01-02T19:25:16.220 に答える