[英]Creating a conditional SQL select statement that inserts
所以,我已经有了这个具有重要数据的表,我正在尝试选择顶级并将其插入名为“TopLevel”的列中
下面是数据看起来像什么?顶级组织称为顶级组织,所有较低级别最终都将“顶级”作为最高级别。
Organization | Parent Org | GParent Org | GGParent Org | Toplevel
Top-Level | - | - | -| - |
Food Corp | Top-Level | - | -| - |
Taco Bell | Food Corp | Top-Level | -| - |
Taco Bell Express | TacoBell | Food Corp | Top-Level | - |
KFC | Food Corp | Top-Level | -| - |
Chuck e. Cheese | Top-Level | -| - | -|
我找不到足够接近的示例,这有助于我理解如何使用字符串进行条件选择/插入。
在父组织=顶级的情况下,应选择组织并将其插入列顶级。 在数据库中,如果某些内容没有更多父组织,则Top-Level将显示为父组织。 无论在哪里找到顶层,都会选择一级(因此,Food Corp,chuck e.cheese)并将其插入到Toplevel列中。 希望不要太困惑。
这是select语句的半英文版本:
select Org.displayName, Parent.displayName as ParentOrg_Name, GParent.displayName as gParentOrg_Name,GGParent.displayName as ggParentOrg_Name, Org.uid, Org.accountType, Org.orgType,Parent.orgType, GParent.orgType
CASE
If Org.ParentOrg_Name == Top-Level,
then toplevelorg = Org.Displayname
elseif gParentOrg_Name == Top-Level,
then toplevelorg = ParentOrg_Name
elseif ggparentOrg_Name == Top-Level,
then toplevelorg = gParentOrg_Name
else toplevelorg = ggparentOrgName
from dbo.Organization Org
LEFT OUTER JOIN dbo.Organization Parent ON Org.parentOrganization_id = Parent.id
LEFT OUTER JOIN dbo.Organization GParent ON Parent.parentOrganization_id = GParent.id
LEFT OUTER JOIN dbo.Organization GGParent ON GParent.parentOrganization_id = GGParent.id
MySQL,PHP ......一个有效的TopLevel专栏将帮助我做一个有意义的分组,因为我不能简单地按父ID分组而不分离顶级组织(他们拥有)的顶级组织。
寻找教导一个人捕鱼的反应,包括解释'如何选择org.displayname插入列'顶层'工作在这样的声明中? 我看一下这些条件陈述,并且无法理解这些条件。 请注意,我不知道是否应该在top select子句中加上'select toplevel'。 我期待着任何回应
CASE的SQL语法与您的SQL语法略有不同,但您很接近:
CASE
WHEN Org.ParentOrg_Name = 'Top-Level'
then Org.Displayname
WHEN gParentOrg_Name = 'Top-Level'
then ParentOrg_Name
WHEN ggparentOrg_Name = 'Top-Level'
then gParentOrg_Name
ELSE ggparentOrgName
END AS toplevelorg
因此,完整的陈述将是
select Org.displayName,
Parent.displayName as ParentOrg_Name,
GParent.displayName as gParentOrg_Name,
GGParent.displayName as ggParentOrg_Name,
Org.uid,
Org.accountType,
Org.orgType,Parent.orgType,
GParent.orgType,
CASE
WHEN Org.ParentOrg_Name = 'Top-Level'
then Org.Displayname
WHEN gParentOrg_Name = 'Top-Level'
then ParentOrg_Name
WHEN ggparentOrg_Name = 'Top-Level'
then gParentOrg_Name
ELSE ggparentOrgName
END AS toplevelorg
from dbo.Organization Org
LEFT OUTER JOIN dbo.Organization Parent ON Org.parentOrganization_id = Parent.id
LEFT OUTER JOIN dbo.Organization GParent ON Parent.parentOrganization_id = GParent.id
LEFT OUTER JOIN dbo.Organization GGParent ON GParent.parentOrganization_id = GGParent.id
Frank PI的响应大部分都有效,但是我得到一个错误,说mssql_query()(php)没有识别列名ParentOrg_Name和其他列名。 我发现这有效,并且别名在case语句中不起作用。 所以完整的陈述是这样的:
select Org.displayName as Organization_Name, Parent.displayName as ParentOrg_Name,
GParent.displayName as gParentOrg_Name,GGParent.displayName as ggParentOrg_Name,
Org.uid, Org.accountType, Org.orgType,
CASE WHEN Parent.displayName = 'Top-Level' then Org.Displayname
when GParent.displayName = 'Top-Level' then Parent.displayName
when ggParent.displayName = 'Top-Level' then gParent.displayName
else ggParent.displayName
END AS toplevelorg
from HQDevBox.dbo.Organization Org
LEFT OUTER JOIN HQDevBox.dbo.Organization Parent ON Org.parentOrganization_id = Parent.id
LEFT OUTER JOIN HQDevBox.dbo.Organization GParent ON Parent.parentOrganization_id = GParent.id
LEFT OUTER JOIN HQDevBox.dbo.Organization GGParent ON GParent.parentOrganization_id = GGParent.id
为了练习学习,还有另一种可能的情况,我可以使用CASE,因为orgType返回一个数字,它被映射到一个字符串值。 所以这是两个CASE的声明(可行和有效)。
select Org.displayName as Organization_Name, Parent.displayName as ParentOrg_Name,
GParent.displayName as gParentOrg_Name,GGParent.displayName as ggParentOrg_Name,
CASE WHEN Parent.displayName = 'Top-Level' then Org.Displayname
when GParent.displayName = 'Top-Level' then Parent.displayName
when ggParent.displayName = 'Top-Level' then gParent.displayName
else ggParent.displayName
END AS toplevelorg,
Org.uid, Org.accountType,
CASE WHEN Org.orgType = 0 then 'Agency'
when Org.orgType = 1 then 'Essential'
when Org.orgType = 2 then 'Power'
when Org.orgType = 3 then 'Sub_Agency'
when Org.orgType = 4 then 'Sub_Organization'
END AS orgType
from HQDevBox.dbo.Organization Org
LEFT OUTER JOIN HQDevBox.dbo.Organization Parent ON Org.parentOrganization_id = Parent.id
LEFT OUTER JOIN HQDevBox.dbo.Organization GParent ON Parent.parentOrganization_id = GParent.id
LEFT OUTER JOIN HQDevBox.dbo.Organization GGParent ON GParent.parentOrganization_id = GGParent.id
希望这会帮助别人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.