选择最大值,但优先考虑某些值
Selecting Max Value, However Prioritising Certain Values
我连接了三个表。 TableA 具有 Column1 (ID) 的唯一值,该值在具有非唯一值的 Column1 上加入 TableC。我目前正在根据 TableC 中 Column2 的最大值加入这些。在 TableB 中返回一个值,该值只是与 TableC 连接。
但是我想对此进行调整,以便如果 TableB.Column2 在 TableC.Column2 中有任何大于 0 的值,则将其选为最大值,如果为 0,则通常根据数字选择最大值值。
我目前的查询是这样的:
Select [TableA].Column2,
FIRST_VALUE([TableB].Column2) OVER (PARTITION BY [TableA].Column2 ORDER BY MAX([TableC].Column2) Desc)
From [TableC] Left Join
[TableA]
On [TableA].Column1 = [TableC].Column1 Left Join
[TableB]
On [TableB].Column3 = [Table3].Column3
我期望发生的是如果:
TableC.Column2 > '0' where TableB.Column2 = 'KEYVALUE' then show Table.Column2 based off TableC.Column3, however if TableC.Column2 = '0' where TableB.Column2 = 'KEYVALUE' then show result of [TableB].Column2 based off MAX [TableC].Column2
示例数据:
示例输出:
S7000,键值
S6500,OTHERVALUE1
希望大家说得通,谢谢。
我觉得你的条件很难满足,但你似乎想要apply
:
Select a.*, bc.column2
From a outer apply
(select top (1) b.column2
from c join
b
on c.column3 = b.column3
where c.column1 = a.column1
order by (case when c.column2 > 0 and b.column2 = 'KEYVALUE'
then 1
else 2
end),
c.column2 desc
) bc;
我连接了三个表。 TableA 具有 Column1 (ID) 的唯一值,该值在具有非唯一值的 Column1 上加入 TableC。我目前正在根据 TableC 中 Column2 的最大值加入这些。在 TableB 中返回一个值,该值只是与 TableC 连接。
但是我想对此进行调整,以便如果 TableB.Column2 在 TableC.Column2 中有任何大于 0 的值,则将其选为最大值,如果为 0,则通常根据数字选择最大值值。
我目前的查询是这样的:
Select [TableA].Column2,
FIRST_VALUE([TableB].Column2) OVER (PARTITION BY [TableA].Column2 ORDER BY MAX([TableC].Column2) Desc)
From [TableC] Left Join
[TableA]
On [TableA].Column1 = [TableC].Column1 Left Join
[TableB]
On [TableB].Column3 = [Table3].Column3
我期望发生的是如果:
TableC.Column2 > '0' where TableB.Column2 = 'KEYVALUE' then show Table.Column2 based off TableC.Column3, however if TableC.Column2 = '0' where TableB.Column2 = 'KEYVALUE' then show result of [TableB].Column2 based off MAX [TableC].Column2
示例数据:
示例输出:
S7000,键值
S6500,OTHERVALUE1
希望大家说得通,谢谢。
我觉得你的条件很难满足,但你似乎想要apply
:
Select a.*, bc.column2
From a outer apply
(select top (1) b.column2
from c join
b
on c.column3 = b.column3
where c.column1 = a.column1
order by (case when c.column2 > 0 and b.column2 = 'KEYVALUE'
then 1
else 2
end),
c.column2 desc
) bc;