繁体   English   中英

查找满足条件的第一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM