我正在尝试编写一个查询,而我正试图弄清楚如何在sql中实现条件语句。基本上我希望我的查询从字符串列表中检查列的值,如果第一个存在只返回带有该字符串的值,如果不存在,则检查下一个字符串并重复该过程。我希望它在找到匹配后立即停止。 例如:
SELECT *
FROM Database
WHERE if colLetter = A // return all data with A value and don't bother checking for the next values. If A doesn't exist check for next value
else if colLetter = B // same instructions above
else if colLetter = C
...
...
我似乎无法理解如何实现这一点。
更新
我试过这个
SELECT (CASE
WHEN colLetter = 'A' AND colValue IS NOT NULL THEN colValue
WHEN colLetter = 'B' AND colValue IS NOT NULL THEN colValue
WHEN colLetter = 'C' AND colValue IS NOT NULL THEN colValue
ELSE NULL END)
我认为这样可行,但它仍会显示所有A,B,C甚至NULL的colValue
答案 0 :(得分:0)
我想我知道你想要什么。这有点复杂,但这是一种方式:
select t.*
from (select t.*,
dense_rank() over (order by (case when colLetter = 'A' then 1
when colLetter = 'B' then 2
when colLetter = 'C' then 3
. . .
end)
) as seqnum
from t
) t
where seqnum = 1;
这将返回匹配的第一个字母。
实际上,你可以更简单地做到这一点:
select top (1) with ties t.*
from t
order by (case when colLetter = 'A' then 1
when colLetter = 'B' then 2
when colLetter = 'C' then 3
. . .
end);
答案 1 :(得分:0)
我可以为您提供帮助您实现目标的内容,但不是一行查询
可选 - 如果可能,基于collvalue的分区表可以提高您的需求的性能。
实际查询 -
声明@count int =(从中选择count(*) 从TABLE中选择top 1 *,其中collname ='A')t)
声明@sql nvarchar(max)=(选择合并(当@ count = 1时的情况) N'选择*来自TABLE,其中collname =''A'''END,'选择''没有A的值''))
EXEC sp_executesql @sql
@ count =(从中选择count(*) 从TABLE中选择top 1 *,其中collname ='B')t)
声明@sql nvarchar(max)=(选择合并(当@ count = 1时的情况) N'从表中选择*,其中collname =''B'''结束,'选择''没有B的值''))
EXEC sp_executesql @sql
希望这会有所帮助。
答案 2 :(得分:-1)
根据您的要求,您将需要带有in运算符的where子句和order by按顺序返回A,B,C匹配的记录
dist
- 4wyd98y98790.css
- 948y59hslas8.js