我会尽力说清楚。
首先,我不负责数据库设计,也无法改变任何相关内容。
我的问题有点奇怪,我无法找到一个好的解决方案。
我们来看这个数据库示例:
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”是“开始年份”。
< / LI>基本上我没有任何想法,因为我不知道如何执行这样的查询(或者至少可以帮助我接近我想要的输出的东西),所以请原谅我。
请注意,DBMS是Access,因为我知道它可能带来问题。
答案 0 :(得分:3)
我的建议类似于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,并忽略其余对
最后一个条件,值对(True, Null
)意味着当前面的条件都不为True时,START_YEAR
将为空。
答案 1 :(得分:1)
您可以使用大量嵌套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
但是,在生成您正在使用的数据的查询中,这可能会更容易。