列中所有值到新列的最大值
Posted
技术标签:
【中文标题】列中所有值到新列的最大值【英文标题】:Max value from all values in column to new column 【发布时间】:2019-02-07 14:04:38 【问题描述】:我需要在包含所有记录的最大年份(存储为文本)的 select 语句中添加新列,然后将其标记为 CY/PY。只有两年总是在表格中。
year value
2019 value1
2019 value2
2018 value3
到目前为止,我尝试了这个,但它只返回该行的最大值,而不是整个列。
select year, value, IIF(year=MAX(year), 'CY', 'PY') AS "CY/PY" from table
预期:
year value CY/PY
2019 value1 CY
2019 value2 CY
2018 value3 PY
【问题讨论】:
您需要从子查询中获取最大年份。 【参考方案1】:我想你想要一个窗口函数:
select year, value,
(case when year = MAX(year) over () then 'CY' else 'PY' end) AS "CY/PY"
from table
【讨论】:
【参考方案2】:尝试使用MAX
作为解析函数:
WITH cte AS (
SELECT year, value, MAX(year) OVER () AS max_year
FROM yourTable
)
SELECT
year,
value,
IIF(year = max_year, 'CY', 'PY') AS "CY/PY"
FROM cte;
【讨论】:
【参考方案3】:尝试在您的 IIF 中使用子查询:
select year, value, IIF(year=(select MAX(year) from table), 'CY', 'PY') AS "CY/PY" from table
【讨论】:
这实际上看起来不错,但我得到了错误。 “错误:函数'IIF(BOOL,UNKNOWN,UNKNOWN)'不存在无法识别满足给定参数类型的函数您可能需要添加显式类型转换”调试似乎有点重。 尝试将 IIF 替换为: case when year=(select MAX(year) from table) then 'CY' else 'PY' end以上是关于列中所有值到新列的最大值的主要内容,如果未能解决你的问题,请参考以下文章
比较两列:如果匹配,则在新列中打印值,如果不匹配,则将第二列的值打印到新列
如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中