1

私はテーブルを持っています:

Type (PK)         Year (PK)    Value
Default           2000         1
Default           2001         2
UserFooAdjusted   2001         3
UserBarAdjusted   2001         4

異なる年を返す最速のSQLクエリは何ですか。同じ年の行が2つある場合は、ユーザーが調整した値が返されます。複数のユーザーがいます。クエリは1人のユーザーのデータを返します。結果の例:

Year    Value
2000    1
2001    3

私は約について考えましA UNION Bたが、どうすれば常にBからの複製を保持できますか?おそらく、より良い解決策は、現在のテーブルを2つのテーブルに分割することです。1つはデフォルト値を含み、もう1つはユーザーが調整した値を含みますか?

4

1 に答える 1

3

Assuming that there are only two types: Default and UserAdjusted, you can use Common Table Expression and Window Functions, in sql server.

WITH recordList
AS
(
    SELECT   YEAR, VALUE,
             ROW_NUMBER() OVER (PARTITION BY  YEAR
                                ORDER BY TYPE DESC) rn
    FROM    tableName
)
SELECT  YEAR, VALUE
FROM    recordList
WHERE   rn = 1
于 2013-01-29T13:29:53.237 に答える