SQL 查询 multiple/embedded CASE
SQL query with multiple/embedded CASE
我卡在查询中了;如果你有时间可以告诉我如何解决吗?
我有一个(假设的)table,其中包含 TypeID、SubTypeID、Option1、Option2 和 Option3 列;最后三列是布尔值。
所以,我可能有这样的东西:
TypeID SubTypeID Option1 Option2 Option3
1 5 false false false
2 0 true false false
2 0 false true true
2 0 true true true
如果 TypeID=2 是下面的情况,我想得到什么,使用上面的例子:
'Option 1'
'Option 2, Option 3'
'Option1, Option 2, Option 3'
我试过了,但出现语法错误,我什至不确定它是否正确:
case when fd.TypeID=1 then ft.SubType else (case when fd.Option1=1 then 'Option 1,' else (case when fd.Option2=1 then 'Option 2,' else (case when fd.Option3=1 then 'Option 3' else '' ))) as SubType,
你可以使用 IIF/CASE
:
SELECT
IIF(Option1='true', 'Option 1,', '') +
IIF(Option2='true', 'Option 2,', '') +
IIF(Option3='true', 'Option 3,', '') AS Output
FROM table_name
WHERE TypeId = 2;
如果您不喜欢最后的逗号,您可以使用以下方式将其删除:
WITH cte AS (
SELECT
IIF(Option1='true', 'Option 1,', '') +
IIF(Option2='true', 'Option 2,', '') +
IIF(Option3='true', 'Option 3,', '') AS Output
FROM table_name
WHERE TypeId = 2
)
SELECT LEFT(Output, len(Output)-1)
FROM cte
WHERE Output <> '';
编辑:
How would I enclose this inside a CASE? Something like: CASE WHEN TypeId=1 THEN something ELSE (your statements)? When I try it I get a bunch of syntax errors.
简单:
SELECT
CASE WHEN Option1='true' THEN 'Option 1,' ELSE '' END +
CASE WHEN Option2='true' THEN 'Option 2,' ELSE '' END +
CASE WHEN Option3='true' THEN 'Option 3,' ELSE '' END AS Output
FROM table_name
WHERE TypeId = 2;
如果你想要中间没有逗号的选项,那么我认为最简单的方法是:
select stuff( ((case when option1 = 'true' then ', Option1' else '' end) +
(case when option2 = 'true' then ', Option2' else '' end) +
(case when option3 = 'true' then ', Option3' else '' end)
), 1, 2, ''
) as option_list
from t;
如果您只想要其中一种类型:
select (case when type = 1
then select stuff( ((case when option1 = 'true' then ', Option1' else '' end) +
(case when option2 = 'true' then ', Option2' else '' end) +
(case when option3 = 'true' then ', Option3' else '' end)
), 1, 2, ''
)
end) as option_list
from t;
我卡在查询中了;如果你有时间可以告诉我如何解决吗?
我有一个(假设的)table,其中包含 TypeID、SubTypeID、Option1、Option2 和 Option3 列;最后三列是布尔值。
所以,我可能有这样的东西:
TypeID SubTypeID Option1 Option2 Option3
1 5 false false false
2 0 true false false
2 0 false true true
2 0 true true true
如果 TypeID=2 是下面的情况,我想得到什么,使用上面的例子:
'Option 1'
'Option 2, Option 3'
'Option1, Option 2, Option 3'
我试过了,但出现语法错误,我什至不确定它是否正确:
case when fd.TypeID=1 then ft.SubType else (case when fd.Option1=1 then 'Option 1,' else (case when fd.Option2=1 then 'Option 2,' else (case when fd.Option3=1 then 'Option 3' else '' ))) as SubType,
你可以使用 IIF/CASE
:
SELECT
IIF(Option1='true', 'Option 1,', '') +
IIF(Option2='true', 'Option 2,', '') +
IIF(Option3='true', 'Option 3,', '') AS Output
FROM table_name
WHERE TypeId = 2;
如果您不喜欢最后的逗号,您可以使用以下方式将其删除:
WITH cte AS (
SELECT
IIF(Option1='true', 'Option 1,', '') +
IIF(Option2='true', 'Option 2,', '') +
IIF(Option3='true', 'Option 3,', '') AS Output
FROM table_name
WHERE TypeId = 2
)
SELECT LEFT(Output, len(Output)-1)
FROM cte
WHERE Output <> '';
编辑:
How would I enclose this inside a CASE? Something like: CASE WHEN TypeId=1 THEN something ELSE (your statements)? When I try it I get a bunch of syntax errors.
简单:
SELECT
CASE WHEN Option1='true' THEN 'Option 1,' ELSE '' END +
CASE WHEN Option2='true' THEN 'Option 2,' ELSE '' END +
CASE WHEN Option3='true' THEN 'Option 3,' ELSE '' END AS Output
FROM table_name
WHERE TypeId = 2;
如果你想要中间没有逗号的选项,那么我认为最简单的方法是:
select stuff( ((case when option1 = 'true' then ', Option1' else '' end) +
(case when option2 = 'true' then ', Option2' else '' end) +
(case when option3 = 'true' then ', Option3' else '' end)
), 1, 2, ''
) as option_list
from t;
如果您只想要其中一种类型:
select (case when type = 1
then select stuff( ((case when option1 = 'true' then ', Option1' else '' end) +
(case when option2 = 'true' then ', Option2' else '' end) +
(case when option3 = 'true' then ', Option3' else '' end)
), 1, 2, ''
)
end) as option_list
from t;