Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
尽管行数为0,但sql查询中需要单行_Sql_Sql Server - Fatal编程技术网

尽管行数为0,但sql查询中需要单行

尽管行数为0,但sql查询中需要单行,sql,sql-server,Sql,Sql Server,下面是我的查询,它不返回任何行,根据数据库记录,这是正确的 SELECT CustomerID , 'Forwarder' AS CustType , RForLocation , YEAR(ReceivedDate) AS CurrentYear , CONVERT(VARCHAR, COUNT(CASE WHEN MONTH(ReceivedDate) = 1 THEN 1

下面是我的查询,它不返回任何行,根据数据库记录,这是正确的

SELECT  CustomerID ,
        'Forwarder' AS CustType ,
        RForLocation ,
        YEAR(ReceivedDate) AS CurrentYear ,
        CONVERT(VARCHAR, COUNT(CASE WHEN MONTH(ReceivedDate) = 1 THEN 1
                                    ELSE 0
                               END)) AS Jan
FROM    RootTable
WHERE   Customerid = 12742
        AND YEAR(ReceivedDate) = 2014
GROUP BY CustomerID ,
        RForLocation ,
        YEAR(ReceivedDate)
但我的要求是,我应该得到一个空行,customerId、custype、CurrentYear和Jan Count为零(0)

以下是我的要求

CustomerId  CustType   CurrentYear   Jan
12742       Forwarder   2014          0
谢谢
请帮助

更改您的
案例
声明

SELECT    CustomerID 
        ,'Forwarder' AS CustType
        ,RForLocation 
        ,YEAR(ReceivedDate) AS CurrentYear
        ,ISNULL(
          NULLIF(
              COUNT(CASE WHEN MONTH(ReceivedDate) = 1 THEN 1 ELSE 0 END)
                 , 0)
              , '')
                                     AS Jan
FROM    RootTable
WHERE   Customerid = 12742
        AND YEAR(ReceivedDate) = 2014
GROUP BY CustomerID ,
        RForLocation ,
        YEAR(ReceivedDate)
CONVERT(VARCHAR, CASE WHEN count(MONTH(ReceivedDate) = 1) 
                           THEN count(MONTH(ReceivedDate) = 1) 

               ELSE 0
end

无论我能理解什么,请找到脚本和更新的查询,我用它尝试了

创建表:

Create table RootTable
(CustomerID int, 
    RForLocation varchar(20), 
    ReceivedDate datetime)
插入数据:

insert into RootTable
Values(1, 'A', '1-Jan-2013'),
    (2, 'A', '1-Feb-2013'),
    (3, 'B', '1-Jan-2013'),
    (4, 'B', '1-Mar-2013')
查询以获取记录:

SELECT  CustomerID ,
        'Forwarder' AS CustType ,
        RForLocation ,
        '2014' AS CurrentYear ,
        CONVERT(VARCHAR, COUNT(CASE WHEN MONTH(ReceivedDate) = 1 AND YEAR(ReceivedDate) = 2014 THEN 1
                                    ELSE null
                               END)) AS Jan
FROM    RootTable
WHERE   Customerid = 1
GROUP BY CustomerID ,
        RForLocation;
因为我想要客户的记录,即使他没有特定年份的任何记录,我不需要在where子句中给出日期条件,相反,我可以根据年份进行计数,这将提供我所需的输出


希望有帮助。

不清楚。如果表中没有数据,您希望获得哪个客户id、客户类型、当前年份和一月?表中有该客户的数据,但它们不属于2014年,它们都属于2013年。但我需要的是它应该返回一月份的零计数行,这可能会有帮助…不,这不会工作相同的结果没有行,我需要ReceivedDate=1,因为稍后我将包括2月、3月…一年中的所有月份。不确定你说的空行是什么意思。显示一些示例数据和所需的输出,也许我可以提供帮助。仅列标题。。CustomerId CustType CurrentYear Jan请再次阅读我的帖子…我需要一个值为零的行,而不是现在的行或任何月份..如果数据库中没有记录,是否有任何方法可以获得一个带有这些值的空行..CustomerId CustType CurrentYear Jan 12742 Forwarder 2014 0我已经编辑了我的答案。你能再试一次代码吗。很遗憾,我没有访问MySQL实例进行测试的权限。SQL Server中需要此查询。当sub1.CNT为空时,您的查询在此行中显示错误,然后将0 ELSE sub.CNT作为月份名称,
SELECT  CustomerID ,
        'Forwarder' AS CustType ,
        RForLocation ,
        '2014' AS CurrentYear ,
        CONVERT(VARCHAR, COUNT(CASE WHEN MONTH(ReceivedDate) = 1 AND YEAR(ReceivedDate) = 2014 THEN 1
                                    ELSE null
                               END)) AS Jan
FROM    RootTable
WHERE   Customerid = 1
GROUP BY CustomerID ,
        RForLocation;