我的表格中有两个字段,我需要一个案例陈述。
Col1 Col2 Col3 abc.txt Y 0 def.txt N 0 bbck.txt Y 1
Col3
值基于以下Col1
和Col2
值。
Y = 1
和N = 0
。因此,Col2
中Y
的{{1}}中的所有值都将变为1
中的col3
,而N
中的Col2
将变为0
在Col3
中,除非col1
值以%c.txt
结尾。正如您所见,abc.txt
以%c.txt
结尾,col3
中的值变为0
。
我知道这可以通过嵌套CASE
语句完成,也许可以完成。有谁知道怎么做?
这是我的代码
SELECT
CASE Col2
WHEN 'Y' THEN '1'
WHEN 'N' THEN '0'
ELSE
(CASE WHEN [Col1] LIKE '%c.txt' THEN '0'
END)
END
AS Col3,
*
FROM Tabl1
希望这能给出一个想法
答案 0 :(得分:2)
也许:
SELECT
CASE
WHEN Col2 = 'N'
OR Col1 LIKE '%c.txt'
THEN '0'
WHEN Col2 = 'Y'
THEN '1'
END AS Col3
, *
FROM Tabl1
答案 1 :(得分:0)
这可能就是你要找的东西:
SELECT * FROM Tabl1
cross apply
(
select Col3 =
CASE
WHEN Tabl1.Col2 = 'Y' then '1'
WHEN Tabl1.Col2 = 'Y' then '1'
WHEN RIGHT(Tabl1.Col1, 6) = 'c.txt' then '0'
END
) as Col3
答案 2 :(得分:0)
SELECT
CASE WHEN Col2 LIKE '%c.txt' THEN '0'
ELSE
CASE
WHEN Col2 = 'N' THEN '0'
WHEN Col2 = 'Y' THEN '1'
END
END AS COL3
FROM Tabl1
答案 3 :(得分:0)
我认为您的规格不够明确,例如是否在“UNLESS”这个词之前用逗号表示以下条款适用于两个之前的条款?
似乎有四种可能的组合:
1) Col1 LIKE '%c.txt'
AND Col2 = 'Y'
2) Col1 LIKE '%c.txt'
AND Col2 = 'N'
3) Col1 NOT LIKE '%c.txt'
AND Col2 = 'Y'
4) Col1 NOT LIKE '%c.txt'
AND Col2 = 'N'
你说
我需要一个案例陈述
这是真的吗?使用SQL,同样的事情总是可以通过多种方式实现(这就是为什么建立一个好的优化器很难:)我认为规范应该声明需要什么而不是对< strong>如何来实现它。
以下使用UNION
而不是案例,如果您从一开始就考虑过这个问题,那么您的规范可能会更好;)
WITH Tabl1
AS
(
SELECT *
FROM (
VALUES ('abc.txt', 'Y'),
('def.txt', 'N'),
('bbck.txt', 'Y'),
('disc.txt', 'N')
) AS T (Col1, Col2)
)
SELECT '0' AS Col3, *
FROM Tabl1
WHERE Col1 LIKE '%c.txt'
AND Col2 = 'Y'
UNION
SELECT '0' AS Col3, *
FROM Tabl1
WHERE Col1 LIKE '%c.txt'
AND Col2 = 'N'
UNION
SELECT '1' AS Col3, *
FROM Tabl1
WHERE Col1 NOT LIKE '%c.txt'
AND Col2 = 'Y'
UNION
SELECT '0' AS Col3, *
FROM Tabl1
WHERE Col1 NOT LIKE '%c.txt'
AND Col2 = 'N';
P.S。我把它编码为与接受的答案相符,但我不相信它是正确的!