Sql 结果显示两行对一行

Sql 结果显示两行对一行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我写了一个查询来计算每天的积极和消极结果。我的问题是,我每天都会收到两行邮件 我希望每天有一行带有正负列(无多天) 通过从组中删除MsrSplatPositive 这迫使积极和消极的结果在不同的日子里出现 然后使用SUM(CASE…)代替CASE(COUNT…) 您可以在“选择”对话框中选择: case([MsrSplatPositive]) when '0' then count([MsrSplatPositive]) end as 'Negative' 相反,我希望: sum(CAS

我写了一个查询来计算每天的积极和消极结果。我的问题是,我每天都会收到两行邮件

  • 我希望每天有一行带有正负列(无多天)


通过从组中删除MsrSplatPositive

这迫使积极和消极的结果在不同的日子里出现

然后使用SUM(CASE…)代替CASE(COUNT…)

您可以在“选择”对话框中选择:

case([MsrSplatPositive]) when '0' then count([MsrSplatPositive]) end as 'Negative'
相反,我希望:

sum(CASE WHEN MsrSplatPositive = 0 THEN 1 ELSE 0 END) as 'Negative'
编辑:

所有已修复的内容应类似于:

SELECT SUM(CASE WHEN MsrSplatPositive = 0 THEN 1 ELSE 0 END) 'Negative'
      ,SUM(MsrSplatPositive 'Positive'
      ,CONVERT(VARCHAR(10), f.NewsDate, 106) as 'Date'
  FROM News.dbo.Score s
       INNER JOIN 
       News.dbo.Feed f on f.ScoreId = s.Id
 WHERE f.NewsDate BETWEEN DATEADD(DAY,-30,GETDATE()) and GETDATE()
 GROUP BY f.NewsDate

通过从组中删除MsrSplatPositive

这迫使积极和消极的结果在不同的日子里出现

然后使用SUM(CASE…)代替CASE(COUNT…)

您可以在“选择”对话框中选择:

case([MsrSplatPositive]) when '0' then count([MsrSplatPositive]) end as 'Negative'
相反,我希望:

sum(CASE WHEN MsrSplatPositive = 0 THEN 1 ELSE 0 END) as 'Negative'
编辑:

所有已修复的内容应类似于:

SELECT SUM(CASE WHEN MsrSplatPositive = 0 THEN 1 ELSE 0 END) 'Negative'
      ,SUM(MsrSplatPositive 'Positive'
      ,CONVERT(VARCHAR(10), f.NewsDate, 106) as 'Date'
  FROM News.dbo.Score s
       INNER JOIN 
       News.dbo.Feed f on f.ScoreId = s.Id
 WHERE f.NewsDate BETWEEN DATEADD(DAY,-30,GETDATE()) and GETDATE()
 GROUP BY f.NewsDate

试试这个…我还没有运行这个查询,但是我认为应该可以达到这个结果。我修改了原始查询,使其在正负列中返回0而不是null。然后将修改后的SQL用作临时表,并按日期值分组

Select Sum(Temp.Negative), Sum(Temp.Positive), Temp.Date From
(
SELECT case([MsrSplatPositive]) when '0' then count([MsrSplatPositive]) 
    else 0 end as 'Negative'
,case([MsrSplatPositive]) when '1' then count([MsrSplatPositive] 
    else 0) end as 'Positive'
,CONVERT(VARCHAR(10), f.NewsDate, 106) as 'Date'
FROM [News].[dbo].[Score] s
inner join [News].[dbo].[Feed] f
on f.ScoreId = s.Id
where f.NewsDate between dateadd(day,-30,GETDATE()) and GETDATE()
group by [MsrSplatPositive],CONVERT(VARCHAR(10), f.NewsDate, 106)
) Temp
Group By Temp.Date

希望这能有所帮助。

试试这个……我还没有运行这个查询,但我认为这应该会达到效果。我修改了原始查询,使其在正负列中返回0而不是null。然后将修改后的SQL用作临时表,并按日期值分组

Select Sum(Temp.Negative), Sum(Temp.Positive), Temp.Date From
(
SELECT case([MsrSplatPositive]) when '0' then count([MsrSplatPositive]) 
    else 0 end as 'Negative'
,case([MsrSplatPositive]) when '1' then count([MsrSplatPositive] 
    else 0) end as 'Positive'
,CONVERT(VARCHAR(10), f.NewsDate, 106) as 'Date'
FROM [News].[dbo].[Score] s
inner join [News].[dbo].[Feed] f
on f.ScoreId = s.Id
where f.NewsDate between dateadd(day,-30,GETDATE()) and GETDATE()
group by [MsrSplatPositive],CONVERT(VARCHAR(10), f.NewsDate, 106)
) Temp
Group By Temp.Date

希望这能有所帮助。

我无法将其移除,因为这是安装所需的select@user1354345之所以“需要”,是因为聚合函数在case/when中,而不是包装它。对。您还需要调整您的选择。所有这些都使坐更简单。我假设msrsplatfinity有点不为空?仅为1或0?正确,我尝试了上述代码,但它每天显示单个记录(每天显示多个记录),我必须将位转换为int以表示sum。这无法在每个新闻日期返回多个记录。如果在给定的日期(天)上有多个新闻日期,则需要将新闻日期转换为组中没有时间的日期。这就是正在发生的事情吗?-Karl KieningerI无法将其移除,因为它是select@user1354345之所以“需要”,是因为聚合函数在case/when中,而不是包装它。对。您还需要调整您的选择。所有这些都使坐更简单。我假设msrsplatfinity有点不为空?仅为1或0?正确,我尝试了上述代码,但它每天显示单个记录(每天显示多个记录),我必须将位转换为int以表示sum。这无法在每个新闻日期返回多个记录。如果在给定的日期(天)上有多个新闻日期,则需要将新闻日期转换为组中没有时间的日期。这就是正在发生的事情吗?-卡尔·基宁格