尽管行数为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;