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