如果查询结果在一列下找不到具有一个赋值的任何内容,如何有一个空行?
How to Have an empty row if query result couldn't find anything with one assigned value under one column?
我正在尝试创建一个视图,为我提供总使用量、总金额和客户的昵称。如果未找到任何内容,它将保留其他列为空,但会显示客户名称和昵称。为了方便起见,我简化了查询并更改了 table 名称和列。任何帮助将不胜感激。提前致谢。
这是我的代码:
select
Client_Name= (case
when account = 123 then 'John'
when account = 234 then 'Doe'
end),
Total_Usage = sum(Credit_Used),
Total_Amount = sum(debit),
Nickname = (case
when account = 123 then 'J'
when account = 234 then 'D'
end)
from myTable
where year= 2015
group by = (case
when account = 123 then 'John'
when account = 234 then 'Doe'
end),
(case
when account = 123 then 'J'
when account = 234 then 'D'
end)
我得到这样的答案:
John 34 3 J
我想要这样的东西:
John 34 3 J
Doe 0 0 D
由于数据库中没有相应的行,因此您不能这样做。
如果您有单独的 table 用户,您可以使用 OUTER 联接来获取它。当然你有那个并且在查询本身中没有一个巨大的 CASE WHEN 东西?
如果仅供两个用户使用,您还可以使用一个简单的 select/union 结构进行外部连接,该结构提供用户 ID 和名称,但这不是很好的方法。
因为您没有 table 用户,并且您有一个巨大的 case/when 表达式...您真的应该创建用户 table!正确维护 2 个大 when/case 表达式将是一场噩梦!
如果您仍然希望选择退出创建用户 table,就像 Sami 建议的那样,您应该创建一个内联视图并将其外部连接到您的主视图 table。 Select 类似于下面的语句应该可以做到。
NB: I've used syntax that is more familiar to me, but that should work
in SQL Server as well.
select b.client_name,
sum(a.credit_used) total_usage,
sum(a.debit) total_amount,
b.nickname
from MyTable a
right outer join
(select 123 account_id, 'John' client_name, 'J' nickname union all
select 234, 'Doe','D') b
on
(a.account = b.account_id)
where a.year = 2015
group by b.client_name, b.nickname
您实际上可以将其外部连接到虚拟 table 并执行:
when account = 234 or account is null then 'Doe'
然后对所有条目执行此操作,只需对其进行外部连接,因为无论如何您都在对名称进行硬编码...
我正在尝试创建一个视图,为我提供总使用量、总金额和客户的昵称。如果未找到任何内容,它将保留其他列为空,但会显示客户名称和昵称。为了方便起见,我简化了查询并更改了 table 名称和列。任何帮助将不胜感激。提前致谢。
这是我的代码:
select
Client_Name= (case
when account = 123 then 'John'
when account = 234 then 'Doe'
end),
Total_Usage = sum(Credit_Used),
Total_Amount = sum(debit),
Nickname = (case
when account = 123 then 'J'
when account = 234 then 'D'
end)
from myTable
where year= 2015
group by = (case
when account = 123 then 'John'
when account = 234 then 'Doe'
end),
(case
when account = 123 then 'J'
when account = 234 then 'D'
end)
我得到这样的答案:
John 34 3 J
我想要这样的东西:
John 34 3 J
Doe 0 0 D
由于数据库中没有相应的行,因此您不能这样做。
如果您有单独的 table 用户,您可以使用 OUTER 联接来获取它。当然你有那个并且在查询本身中没有一个巨大的 CASE WHEN 东西?
如果仅供两个用户使用,您还可以使用一个简单的 select/union 结构进行外部连接,该结构提供用户 ID 和名称,但这不是很好的方法。
因为您没有 table 用户,并且您有一个巨大的 case/when 表达式...您真的应该创建用户 table!正确维护 2 个大 when/case 表达式将是一场噩梦!
如果您仍然希望选择退出创建用户 table,就像 Sami 建议的那样,您应该创建一个内联视图并将其外部连接到您的主视图 table。 Select 类似于下面的语句应该可以做到。
NB: I've used syntax that is more familiar to me, but that should work in SQL Server as well.
select b.client_name,
sum(a.credit_used) total_usage,
sum(a.debit) total_amount,
b.nickname
from MyTable a
right outer join
(select 123 account_id, 'John' client_name, 'J' nickname union all
select 234, 'Doe','D') b
on
(a.account = b.account_id)
where a.year = 2015
group by b.client_name, b.nickname
您实际上可以将其外部连接到虚拟 table 并执行:
when account = 234 or account is null then 'Doe'
然后对所有条目执行此操作,只需对其进行外部连接,因为无论如何您都在对名称进行硬编码...