0

次のエントリを持つテーブルがあると仮定します。

ID    VALUE    CATEGORY
-----------------------
 1       10    A
 1       20    S
 2       30    S
 2       10    A
 3       50    A
 4       40    C
 5       60    B

カテゴリが存在する場合はIDごとにSそのレコードを出力し、存在しない場合は存在するエントリを出力するようにSQLクエリを作成するにはどうすればよいですか。したがって、私の例では、次の結果を達成したいと思います。

ID    VALUE    CATEGORY
-----------------------
 1       20    S
 2       30    S
 3       50    A
 4       40    C
 5       60    B
4

2 に答える 2

1

試す、

SELECT  ID, VALUE, Category
FROM    tableName
WHERE   Category = 'S'
UNION
SELECT  ID, VALUE, Category
FROM    tableName
WHERE   ID NOT IN
                (
                    SELECT  ID
                    FROM    tableName
                    WHERE   Category = 'S'
                )
ORDER BY ID

SQLFiddleデモ

于 2012-09-03T15:43:13.007 に答える
0

私はよりエレガントな解決策を見つけました:-)

SELECT  ID, VALUE, CATEGORY
  FROM  (
      SELECT ID, VALUE, CATEGORY,
          ROW_NUMBER() OVER (PARTITION BY ID) as SEQ_ID
        FROM MY_TABLE
      ORDER BY ID, CATEGORY DESC
  )
 WHERE SEQ_ID = 1
于 2012-09-04T07:51:00.630 に答える