Sql 当查询输出为空时,在字段中显示零值
约翰·格雷买了多少手电筒 这是我需要实现的结果: 到目前为止,我有:Sql 当查询输出为空时,在字段中显示零值,sql,tsql,sql-server-2008,Sql,Tsql,Sql Server 2008,约翰·格雷买了多少手电筒 这是我需要实现的结果: 到目前为止,我有: IF NOT (EXISTS (SELECT c.[customerid], c.[firstname], c.[lastname], cp.[quantity] FROM [dbo].[customers] AS c INNER JOIN [dbo].[Customer_Purchases] AS cp ON c.[custome
IF NOT (EXISTS (SELECT
c.[customerid],
c.[firstname],
c.[lastname],
cp.[quantity]
FROM [dbo].[customers] AS c
INNER JOIN [dbo].[Customer_Purchases] AS cp
ON c.[customerid] = cp.[customerid]
WHERE
c.[customerid] = 10101
AND cp.[item] = 'Flashlight'
GROUP BY
c.[customerid],
c.[firstname],
c.[lastname],
cp.[quantity]
)
)BEGIN
SELECT
c.[customerid] AS ID,
c.[firstname] AS First Name,
c.[lastname] AS Last Name,
'Flashlight' AS Item,
'0' As Quantity
FROM [dbo].[customers] AS c
WHERE
c.[customerid] = 10101
GROUP BY
c.[customerid],
c.[firstname],
c.[lastname]
END
更实际的方法是什么
关于这类(、和)的问题,我已经过了好几次这样的讨论,但是必要的JOIN
似乎让它对我来说太复杂了
编辑1:
SELECT c.[customerid], c.[firstname], c.[lastname],
COALESCE(SUM(cp.quantity), 0)
FROM dbo.customers c LEFT JOIN
dbo.Customer_Purchases cp
ON c.customerid = cp.customerid AND
cp.item = 'flashlight'
WHERE c.customerid = 10101
GROUP BY c.[customerid], c.[firstname], c.[lastname];
注意:您不希望按数量进行聚合。大概,您要将手电筒的所有数量相加。而对手电筒(而不是对客户)的过滤需要在
on
子句中,因为购买是左连接中的第二个表
“当我尝试时出现了各种错误”,这些错误是什么?@Larnu我想否决票是针对错误部分的。你想让我把它们列出来,或者编辑问题以恢复否决票吗?“我想否决票是针对错误部分的。”这不是我的,所以我不知道我害怕。可能有很多原因,包括说你有一个错误,而没有告诉我们错误是什么。有很多用户不喜欢人们说“我看了网上的各种帖子”,但也不要引用它们。然而,我无法恢复我没有投下的反对票;“只有选民才能这样做。”拉努,我在这个问题上加了一些更正,正如他们指出的那样。无法提供错误消息。因为他们当时没有收集。如果有办法从日志中提取它们,请告诉我。对不起,@Gordon Linoff更快。我仍然喜欢这种方法。
SELECT c.[customerid], c.[firstname], c.[lastname],
sum(case when cp.item = 'flashlight' then cp.quantity else 0 end)
FROM dbo.customers AS c
LEFT JOIN dbo.Customer_Purchases AS cp ON c.customerid = cp.customerid
WHERE c.customerid = 10101
GROUP BY c.[customerid], c.[firstname], c.[lastname]