Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 找到满足条件的第一列_Sql_Ms Access - Fatal编程技术网

Sql 找到满足条件的第一列

Sql 找到满足条件的第一列,sql,ms-access,Sql,Ms Access,我会尽量说清楚的 首先,我不负责数据库设计,也不能对其进行任何更改 我的问题有点奇怪,我找不到一个好的解决办法 让我们以这个数据库为例: 这是我想要得到的输出: 我不知道你是否注意到我是如何建立输出的:事实上,我想得到模型和它们的开始年份。 让我们以第一个模型为例 日产xxxx在2015年、2016年和2017年的所有时间都是0,直到2018年,不再是0,所以2018年是开始的一年 福特xx在2015年和2016年的所有时间都是0,直到2017年和2017年,不再是0,因此2017年是开始的一年

我会尽量说清楚的

首先,我不负责数据库设计,也不能对其进行任何更改

我的问题有点奇怪,我找不到一个好的解决办法

让我们以这个数据库为例:

这是我想要得到的输出:

我不知道你是否注意到我是如何建立输出的:事实上,我想得到模型和它们的开始年份。 让我们以第一个模型为例

日产xxxx在2015年、2016年和2017年的所有时间都是0,直到2018年,不再是0,所以2018年是开始的一年

福特xx在2015年和2016年的所有时间都是0,直到2017年和2017年,不再是0,因此2017年是开始的一年

基本上我没有什么好主意,因为我不知道如何执行这样的查询,或者至少可以帮助我接近我想要的输出,所以请原谅我


请注意,DBMS是Access,因为我知道它会带来问题。

您可以使用大量嵌套的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

但是,在生成您正在处理的数据的查询中,这可能会容易得多。

我的建议与Gordon的类似,只是我更喜欢一个Switch表达式而不是多个嵌套的IIf表达式

选择 制作 模型 转换 CY_2006>0,2006, CY_2007>0,2007, CY_2008>0,2008, ... 等 CY_2023>0,2023, 对,空 作为今年的开始 开关返回第一个条件值对中的值,其中条件的计算结果为True,并忽略其余的值对


最后一个条件value pair True,Null表示当前面的条件都不为True时,START_YEAR将为Null

2015年、2016年有多少个赛昂人。。。。。数据库表中是否存在?事实上它从2006到2023 @ NIdAdvaseRead。您应该考虑规范表结构。嗯,可以通过字段容器循环以获得字段列表,因为您希望动态地完成此项操作,而不是使用静态列表,并检查每个值。但老实说,这将是一个彻底的混乱,我不知道你甚至可以做它在正确的顺序。在同样混乱的情况下,唯一的另一种方法是编写一个庞大的IIF语句,并逐个检查每个字段。比如,开始年份:IIFCY_2018=0,IIFCY_2017=0,IIFCY_2016=0,CY_2015,0,2016,2017,2018等等。@GiorgosBetsos I现在表格结构很糟糕,但我不允许更改它。我只能对它执行我想要的任何查询,但不幸的是我不能更改数据库设计。谢谢你的回答。你认为哪种方法在性能方面更好:1。使用VB嵌套IIF动态构建您给我的查询,并执行查询以获得结果。2.使用@Andre方法,该方法使用VB循环遍历记录集的行,然后遍历字段并获取output@TheoBabilon:最好试试看。也许首先是一个MAKE的子集。我喜欢这个,考虑到我的数据库设计,这肯定是最干净的方法之一。我会给它一个尝试,并更新为接受明天工作顺利,我得到了输出,我期待所以感谢你的这一点!
MAKE     MODEL     START_YEAR

Nissan   xxxx      2018
Ford     xx        2017
...
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