[英]Azure SQL how to get first element in array which satisfies the condition
[英]Find first column which satisfies a condition
我会尽力弄清楚。
首先,我不负责数据库设计,也不能更改任何内容。
我的问题有点奇怪,我找不到很好的解决方案。
让我们以这个数据库示例为例 :
MAKE MODEL CY_2015 CY_2016 CY_2017 CY_2018 CY_2019 ...
Nissan xxxx 0 0 0 15475 1425723 ...
Ford xx 0 0 75542 82317 12454 ...
...
这是我想得到的输出 :
MAKE MODEL START_YEAR
Nissan xxxx 2018
Ford xx 2017
...
我不知道您是否注意到如何构建输出:实际上,我想获取模型及其“开始年份”。 让我们以第一个模型为例。
日产xxxx每次都为“ 0”(CY_2015,CY_2016和CY_2017为“ 0”),直到“ CY_2018”不再为“ 0”为止,因此“ 2018”为“开始年”。
福特xx每次都为“ 0”(CY_2015,CY_2016为“ 0”),直到“ CY_2017”不再为“ 0”,因此“ 2017”为“开始年”。
基本上我没有什么要提出的,因为我不知道如何执行这样的查询(或者至少可以帮助我接近所需的输出),因此请原谅。
请注意,DBMS是Access,因为我知道它会带来问题。
我的建议与Gordon的建议类似,除了我更喜欢使用一个Switch
表达式而不是多个嵌套的IIf
表达式。
SELECT
MAKE,
MODEL,
Switch
(
CY_2006 > 0, 2006,
CY_2007 > 0, 2007,
CY_2008 > 0, 2008,
... etc ...
CY_2023 > 0, 2023,
True, Null
) AS START_YEAR
Switch
从第一个条件返回值 , 条件对取值为条件为真,而忽略其余对。
最后一个条件值对( True, Null
)表示当先前的条件都不为True时START_YEAR
将为Null。
您可以使用大量嵌套的iif()
语句来做到这一点:
select make, model,
iif(cy_2015 > 0, '2015',
iif(cy_2016 > 0, '2016'
iif(cy_2017 > 0, '2017'
iif(cy_2018 > 0, '2018'
iif(cy_2019 > 0, '2019')
)
)
)
) as start_year
但是,在生成正在使用的数据的查询中,这样做可能会容易得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.