5

次のようなサンプルテーブルがあります。

ID     Name            Code     Address
----+---------------+--------+----------------
1   |  Sydney Hall  |  SH    |  11 Abc Street
2   |  Sydney Hall  |  SH    |  23 Abc Street
3   |  Main Hall    |  MH    |  74 Xyz Street
4   |  Odyssey Hall |  OH    |  133 AbZ Street
5   |  Odyssey Hall |  OH    |  28 Xyx Street

これらの個別のエントリのIDと名前だけでなく、個別のコードエントリも選択したいと思います。上記の表について、次の情報を取得したいと思います(したがって、建物の住所は無視しています)。

ID     Name            Code   
----+---------------+--------+
1   |  Sydney Hall  |  SH
3   |  Main Hall    |  MH
4   |  Odyssey Hall |  OH

おそらく左結合ですが、適切に組み合わせることができないようです(特に、同じテーブルからデータを選択しているため)。誰かがこれについて考えを持っていますか?ありがとう。

4

5 に答える 5

4

誰もがすでにこれに答えているようですが、なぜそんなに複雑なのですか?

SELECT 
MIN(ID) ID, 
MIN(NAME) NAME, 
CODE 
FROM TABLE 
GROUP BY CODE
于 2013-02-11T05:16:57.003 に答える
2

これを行うには2つの方法があります。FIRST1つは、集計関数を使用することです(ここに記載されています)。構文は少し紛らわしいですが、それは仕事をする必要があります

Select
  MIN(ID) keep (dense_rank first order by id) as id,
  MIN(NAME) keep (dense_rank first order by id) as name,
  CODE
FROM YOUR_TABLE
GROUP BY CODE

私が提案する他の代替方法はROW_NUMBER、@ techdoによって提案された関数を使用することですが、その回答からNAME列を削除して、代わりに次を使用する必要があると思います。

SELECT * FROM(
  SELECT 
      ROW_NUMBER() over (partition by CODE order by ID) RNUM, 
      ID, 
      NAME, 
      CODE
    FROM YOUR_TABLE
  )x where RNUM=1;
于 2013-02-11T05:16:59.013 に答える
2
SELECT * 
FROM [table_1] 
WHERE [ID] IN (SELECT Min([ID]) 
               FROM [table_1] 
               GROUP BY CODE
              )
于 2013-02-11T04:20:01.607 に答える
0

してみてください:

SELECT * FROM(
  SELECT 
      ROW_NUMBER() over (partition by NAME, CODE order by NAME, CODE) RNUM, 
      ID, 
      NAME, 
      CODE, 
      ADDRESS 
    FROM YourTABLE
  )x where RNUM=1;
于 2013-02-11T04:29:42.227 に答える
0

これも使用できます:

SELECT ID, Name, Code  
FROM table 
WHERE ID IN (SELECT Max(ID) 
             FROM table 
             GROUP BY Code
            )
于 2013-02-11T04:51:18.933 に答える