首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表的多个列中搜索特定值

从表的多个列中搜索特定值
EN

Stack Overflow用户
提问于 2019-03-29 19:18:35
回答 3查看 55关注 0票数 0

我有一个包含示例列的表::

代码语言:javascript
复制
P_ID    P1_QUALITY      P2_QUALITY      P3_QUALITY
1           A               C               C
2           A+              C               C
3           A               C               C
4           B+              C               C
5           A-              C               C

在(P1_QUALITY, P2_QUALITY, P3_QUALITY)中只有一列不会包含“C”,就像这里的P1_QUALITY,另一次它可能是P3_QUALITY。我必须得到不包含'C‘值的column name。我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2019-03-29 19:20:21

您可以使用apply

代码语言:javascript
复制
select t.*, q.*
from t cross apply
     (select qual, col
      from (values (P1_QUALITY, 'P1_QUALITY'), (P2_QUALITY, 'P2_QUALITY'), (P3_QUALITY, 'P3_QUALITY')
           ) v(qual, col)
      where qual <> 'C'
     ) q;
票数 1
EN

Stack Overflow用户

发布于 2019-03-29 19:32:25

您也可以尝试使用CASE WHEN

代码语言:javascript
复制
SELECT CASE 
WHEN P2_QUALITY <> 'C' and P3_QUALITY <> 'C' THEN 'P1_QUALITY'
WHEN P1_QUALITY <> 'C' and P3_QUALITY <> 'C' THEN 'P2_QUALITY'
WHEN P1_QUALITY <> 'C' and P2_QUALITY <> 'C' THEN 'P3_QUALITY'
END AS 'Result'
FROM TABLE_NAME
票数 1
EN

Stack Overflow用户

发布于 2019-03-29 19:44:11

使用带有NOT LIKECASE,您可以获得值不以'C‘开头的第一列的名称

(假设还可以有值'C+‘或'C-')

代码语言:javascript
复制
SELECT t.*,
(CASE 
 WHEN P1_QUALITY NOT LIKE 'C%' THEN 'P1_QUALITY'
 WHEN P2_QUALITY NOT LIKE 'C%' THEN 'P2_QUALITY'
 WHEN P3_QUALITY NOT LIKE 'C%' THEN 'P3_QUALITY'
 END) AS [NotC]
FROM YourTable t;

如果你想把查询限制在那些没有3 'C‘的地方呢?

只需添加一个如下所示的WHERE子句:

代码语言:javascript
复制
WHERE CONCAT(P1_QUALITY, P2_QUALITY, P3_QUALITY) NOT LIKE 'C%C%C%'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55416301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档