Sql 如何在用例中选择?
我正在使用SQL Server。整个查询要长得多,我希望将重点放在需要修复的部分。我有一个类似这样的方法:Sql 如何在用例中选择?,sql,sql-server,select,subquery,case,Sql,Sql Server,Select,Subquery,Case,我正在使用SQL Server。整个查询要长得多,我希望将重点放在需要修复的部分。我有一个类似这样的方法: SELECT a, b, ..., g, (SELECT p.name + ' (' + pd.class + ')' FROM person p INNER JOIN person_data pd ON p.personid = pd.personid AND pd.typeid = 1 WHERE p.personid = k.c
SELECT
a, b, ..., g,
(SELECT p.name + ' (' + pd.class + ')'
FROM person p
INNER JOIN person_data pd ON p.personid = pd.personid AND pd.typeid = 1
WHERE p.personid = k.contactid) as Person
FROM
maindata md
INNER JOIN
........
我想用CASE
语句替换pd.class
CASE (SELECT ....)
WHEN 1 THEN ....
WHEN 2 THEN ....
END
我在查询中使用了这样的CASE
语句,但它们在原始SELECT
中是分开的(参见a、b等)。如何将案例
语句插入选择
中的SELECT中
比如:
SELECT
a, b, ..., g,
(SELECT p.name + ' (' +
class = (CASE (SELECT .....)
WHEN 1 THEN ....
WHEN 2 THEN ....
END)
+ ')' FROM person p
INNER JOIN person_data pd ON p.personid = pd.personid AND pd.typeid = 1
WHERE p.personid = k.contactid) as Person
FROM maindata md
INNER JOIN ........
你试过了吗?
+class=
是不合法的,但是CASE(SELECT…
是完全合法的。CASE
在t-SQL中不是一个语句-它是一个返回单个原子值的表达式(比如a+b
)……我想如果你省略了“class=”谢谢你@jeroemostert和GuidoG),你的查询就会成功。这确实是问题所在。谢谢marc_s的澄清。