1

我有一张桌子:

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

返回不同年份的最快 SQL 查询是什么,如果有两行相同年份,则返回用户调整值?有多个用户。该查询返回一位用户的数据。示例结果:

Year    Value
2000    1
2001    3

我已经考虑过了,A UNION B但我如何始终保留 B 的副本?也许更好的解决方案是将当前表分成两个表:一个包含默认值,另一个包含用户调整的值?

4

1 回答 1

3

假设只有两种类型:DefaultUserAdjusted,可以在 sql server中使用Common Table Expressionand 。Window Functions

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 回答