我有一个Vehicle表,其中包含Owner_ID字段.此Owner_ID将对应Customer表中的ID字段或Business表中的ID字段.我希望根据ID所属的表返回不同的值.
我有这样的声明:
SELECT v.Make, v.Model
FROM Vehicle v
LEFT JOIN Customer c ON c.ID = v.Owner_ID
LEFT JOIN Business b ON b.ID = v.Owner_ID
Run Code Online (Sandbox Code Playgroud)
因此,如果Owner_ID = Customer.ID,我想返回客户姓氏,如果Owner_ID = Business_ID,则返回业务名称.我知道我可以CASE这样说:
SELECT v.Make, v.Model,
CASE WHEN c.ID IS NOT NULL THEN c.Surname
WHEN b.ID IS NOT NULL THEN b.Name
Run Code Online (Sandbox Code Playgroud)
但有没有办法从一个案例陈述中获得多个值?类似的东西:(顺便说一句,我知道这是完全错误的.)
SELECT v.Make, v.Model,
CASE WHEN c.ID IS NOT NULL THEN
SELECT c.Surname, c.Date_Of_Birth
WHEN b.ID IS NOT NULL THEN
SELECT b.Name, b.Founded
Run Code Online (Sandbox Code Playgroud)
或者我必须这样做:
SELECT v.Make, v.Model,
CASE WHEN c.ID IS NOT NULL THEN c.Surname
WHEN b.ID IS NOT NULL THEN b.Name
END AS "Name",
CASE WHEN c.ID IS NOT NULL THEN c.Date_Of_Birth
WHEN b.ID IS NOT NULL THEN b.Founded
END AS "DOB/Founded"
Run Code Online (Sandbox Code Playgroud)
不,没有办法让case表达式的分支跨越多个列。
在你的例子中你可以这样做
SELECT v.Make,
v.Model,
MAX(COALESCE(c.Surname, b.name)) as name
FROM Vehicle v
LEFT JOIN Customer c
ON c.ID = v.Owner_ID
LEFT JOIN Business b
ON b.ID = v.Owner_ID
GROUP BY v.Owner_ID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6024 次 |
| 最近记录: |