我必须在子查询中运行带有case语句的子查询。当我独立运行子查询时,它可以工作,但作为子查询,它会产生以下错误:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
这是我的疑问:
select categoryid, categoryname, (select (case when c.ParentCategoryId is NULL then null else c.CategoryName end) as Parent_Category_Name from Categories c) from Categories
我的类别表有3列:CategoryId,CategoryName,ParentCategoryId
我无法弄清楚如何获取所需的结果。
答案 0 :(得分:1)
这很可能是您需要对查询执行的操作:
select
C1.categoryid,
C1.categoryname,
case
when c1.ParentCategoryId is NULL
then null
else c2.CategoryName
end as Parent_Category_Name
from Categories C1
left join Categories C2
on C1.ParentCategoryID=C2.CategoryID
您的子查询有效并可帮助您查找所有类别的parent_category_name
。
你不需要重复整个过程来将这个逻辑集成到其他查询中;只要选择部分就足够了。
更简单地说,您不需要使用JOIN进行案例评估。
select
C1.categoryid,
C1.categoryname,
c2.CategoryName as Parent_Category_Name
from Categories C1
left join Categories C2
on C1.ParentCategoryID=C2.CategoryID
答案 1 :(得分:1)
您的子查询
(select (case when c.ParentCategoryId is NULL then null else c.CategoryName end) as Parent_Category_Name
from Categories c)
将返回所有类别,它会导致问题。 据我了解,您的查询应该是:
select c.categoryid, c.categoryname,
CASE
when c.ParentCategoryId IS NULL then ''
ELSE pr.categoryname
END as Parent_Category_Name
from Categories c
LEFT JOIN Categories pr ON c.ParentCategoryId = pr.categoryid
答案 2 :(得分:0)
在子查询中指定Top(1)。它似乎返回多个不被接受为子查询结果的值。
select categoryid, categoryname, (select TOP(1) (case when c.ParentCategoryId is NULL then null else c.CategoryName end) as Parent_Category_Name from Categories c) from Categories
答案 3 :(得分:0)
试试这个。
select categoryid, categoryname, case when c.ParentCategoryId is NULL then null else c.CategoryName end as Parent_Category_Name from Categories