Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当查询输出为空时,在字段中显示零值_Sql_Tsql_Sql Server 2008 - Fatal编程技术网

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:

  • 纠正代码中的不一致之处
  • 提供了指向SO线程的超链接
  • 约翰·格雷买了多少手电筒

    只需使用左连接:

    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]