Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 合并Defaut和用户调整的数据_Sql_Sql Server_Tsql_Greatest N Per Group - Fatal编程技术网

Sql 合并Defaut和用户调整的数据

Sql 合并Defaut和用户调整的数据,sql,sql-server,tsql,greatest-n-per-group,Sql,Sql Server,Tsql,Greatest N Per Group,我有一张桌子: Type (PK) Year (PK) Value Default 2000 1 Default 2001 2 UserFooAdjusted 2001 3 UserBarAdjusted 2001 4 返回不同年份的最快SQL查询是什么?如果有两行的年份相同,则返回用户调整后的值?有多个用户。查询返回一个用户的数据。示例结果: Year

我有一张桌子:

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联合体B
,但是我怎样才能始终不让B收到副本呢?也许更好的解决方案是将当前表分为两个表:一个表包含默认值,另一个表包含用户调整的变量?

假设只有两种类型:默认值和用户调整值,您可以在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

@hidarikani如果有许多类型,您可以筛选出
UserAdjusted
作为年度列表中的第一个,单击此处