我有一个包含示例列的表::
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。我该怎么做呢?
发布于 2019-03-29 19:20:21
您可以使用apply
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;发布于 2019-03-29 19:32:25
您也可以尝试使用CASE WHEN:
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发布于 2019-03-29 19:44:11
使用带有NOT LIKE的CASE,您可以获得值不以'C‘开头的第一列的名称
(假设还可以有值'C+‘或'C-')
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子句:
WHERE CONCAT(P1_QUALITY, P2_QUALITY, P3_QUALITY) NOT LIKE 'C%C%C%'https://stackoverflow.com/questions/55416301
复制相似问题