Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server SQL新手。我如何让下面的查询给出每日结果?_Sql Server - Fatal编程技术网

Sql server SQL新手。我如何让下面的查询给出每日结果?

Sql server SQL新手。我如何让下面的查询给出每日结果?,sql-server,Sql Server,好的,我有下面的问题,但我正试着思考如何在给定的日期范围内给我每日结果。到目前为止,这基本上是我的疑问: SELECT Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1' WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2' WHEN Project <>

好的,我有下面的问题,但我正试着思考如何在给定的日期范围内给我每日结果。到目前为止,这基本上是我的疑问:

SELECT Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                       WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                       WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                       WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                       ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount                       

-- Joins here to gather and refine data collected

WHERE Date >= '03/20/2017'
       AND Date < '03/23/2017'
GROUP BY CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                           WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                           WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                           WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                           ELSE Code END
ORDER BY TotalCount DESC
理想情况下,它会给我:

Date         Source   TotalCount  TotalAmount
2017-03-20   SOURCE1  60          625
2017-03-20   SOURCE2  13          60
-- etc
2017-03-21   SOURCE1  63          600
2017-03-21   SOURCE2  10          66
-- etc

它还必须给出单个杂项来源(即除重新标记的主要4个来源外的1/+额外来源)的总计数和数量。我该怎么做呢?提前感谢您帮助一位新手

如果您只需将日期添加到select和group中,我想您应该会得到您想要的。像这样:

SELECT Date,Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                       WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                       WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                       WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                       ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount                       

-- Joins here to gather and refine data collected

WHERE Date >= '03/20/2017'
       AND Date < '03/23/2017'
GROUP BY CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                           WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                           WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                           WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                           ELSE Code END
ORDER BY date,TotalCount DESC
选择日期,当项目='code'或代码='1'时,选择Source=CASE,然后选择'SOURCE1'
当项目'CODE'和代码='2'时,则为'SOURCE2'
当项目'CODE'和代码='3'时,则为'SOURCE3'
当项目'CODE'和代码='4'时,则为'SOURCE4'
否则代码结束,将(文档)计数为TotalCount,将总和(金额)计数为TotalAmount
--在此联接以收集和优化收集的数据
其中日期>='2017年3月20日'
日期<'2017年3月23日'
当项目='CODE'或代码='1'然后是'SOURCE1'时按情况分组
当项目'CODE'和代码='2'时,则为'SOURCE2'
当项目'CODE'和代码='3'时,则为'SOURCE3'
当项目'CODE'和代码='4'时,则为'SOURCE4'
ELSE代码结束
按日期排序的订单,TotalCount DESC

听起来您希望在日期字段上进行聚合。因此,调整你的逻辑,使之成为这样,可能对你有用:

SELECT [Date]
, 'SOURCE' + Code AS Source
, COUNT(Document) as TotalCount
, SUM(Amount) as TotalAmount
--FROM...                       
GROUP BY [Date], 'SOURCE' + Code
ORDER BY COUNT(Document) DESC
这将为您提供与所请求内容更相似的输出。如果确实存在“Code”有时不等于1的实例,那么您可能需要添加一个额外的逻辑位。进行以下调整可能有效:

SELECT [Date]
, 'SOURCE' + CASE WHEN Project = 'CODE' OR Code = '1' THEN '1' ELSE Code END AS Source
, COUNT(Document) as TotalCount
, SUM(Amount) as TotalAmount     
--FROM...                  
GROUP BY [Date]
, 'SOURCE' + CASE WHEN Project = 'CODE' OR Code = '1' THEN '1' ELSE Code END
ORDER BY COUNT(Document) DESC

应该可以了。

@ChadPortman离我们很近,只是在分组中遗漏了日期。最终查询如下所示:

SELECT Date, Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                   WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                   WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                   WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                   ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount                       

-- Joins here to gather and refine data collected

WHERE Date >= '03/20/2017'
       AND Date < '03/23/2017'
GROUP BY Date, CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                           WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                           WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                           WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                           ELSE Code END
ORDER BY Date, TotalCount DESC
选择日期,当项目='code'或代码='1'时,选择Source=CASE,然后选择'SOURCE1'
当项目'CODE'和代码='2'时,则为'SOURCE2'
当项目'CODE'和代码='3'时,则为'SOURCE3'
当项目'CODE'和代码='4'时,则为'SOURCE4'
否则代码结束,将(文档)计数为TotalCount,将总和(金额)计数为TotalAmount
--在此联接以收集和优化收集的数据
其中日期>='2017年3月20日'
日期<'2017年3月23日'
按日期分组,当项目='CODE'或代码='1'然后是'SOURCE1'时按大小写
当项目'CODE'和代码='2'时,则为'SOURCE2'
当项目'CODE'和代码='3'时,则为'SOURCE3'
当项目'CODE'和代码='4'时,则为'SOURCE4'
ELSE代码结束
按日期排序的订单,TotalCount DESC

这正是我所需要的。谢谢大家的回复

Sql不会动态生成列。在开始编写查询之前,您需要知道每个列名和类型的确切值。谢谢您的提醒,@JoelCoehoorn。正在更新所需的输出,使其更好地工作。您还需要在日期上执行分组操作,以获得所需的结果完全从我身边飞过,按日期对其进行分组。。。我需要更多的咖啡。明白了,@Rams!我正要回复我的帖子,回答是这样的。谢谢谢谢你的回复!
SELECT Date, Source = CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                   WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                   WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                   WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                   ELSE Code END, Count(Document) as TotalCount, SUM(Amount) as TotalAmount                       

-- Joins here to gather and refine data collected

WHERE Date >= '03/20/2017'
       AND Date < '03/23/2017'
GROUP BY Date, CASE WHEN Project = 'CODE' OR Code = '1' THEN 'SOURCE1'
                           WHEN Project <> 'CODE' AND Code = '2' THEN 'SOURCE2'
                           WHEN Project <> 'CODE' AND Code = '3' THEN 'SOURCE3'
                           WHEN Project <> 'CODE' AND Code = '4' THEN 'SOURCE4'
                           ELSE Code END
ORDER BY Date, TotalCount DESC