Sql server 在一个查询中获取所有结果的SQL查询
测试数据:Sql server 在一个查询中获取所有结果的SQL查询,sql-server,sql-server-2008,Sql Server,Sql Server 2008,测试数据: id date company location ---------------------------------- 1 03/01/2016 ABC india 2 03/25/2016 ABC us 3 02/24/2016 ABC india 4 02/25/2016 ABC us 5 03/02/2016 ABC
id date company location
----------------------------------
1 03/01/2016 ABC india
2 03/25/2016 ABC us
3 02/24/2016 ABC india
4 02/25/2016 ABC us
5 03/02/2016 ABC india
company currentmonth Previousmonth location
ABC 2 1 india
ABC 1 1 us
问题#1
问题2
需要计算当前月份和前几个月的位置计数。
如何在一个查询中编写SQL查询以返回如下位置信息
预期结果:
id date company location
----------------------------------
1 03/01/2016 ABC india
2 03/25/2016 ABC us
3 02/24/2016 ABC india
4 02/25/2016 ABC us
5 03/02/2016 ABC india
company currentmonth Previousmonth location
ABC 2 1 india
ABC 1 1 us
尝试:
因为您使用本月(三月)和上一个月进行了两次查询和筛选。我决定使用函数MONTH
从系统的当前日期(getdate()
)中提取月份,然后减去1,这样您将始终拥有当前月份和上一个月份
编辑
正如@DhananjayaKuppu所指出的,我修复了月份为一月时的问题,因为month
函数返回一个整数,在我的计算中它将返回0。现在它已修复。尝试:
因为您使用本月(三月)和上一个月进行了两次查询和筛选。我决定使用函数MONTH
从系统的当前日期(getdate()
)中提取月份,然后减去1,这样您将始终拥有当前月份和上一个月份
编辑
正如@DhananjayaKuppu所指出的,我修复了月份为一月时的问题,因为
month
函数返回一个整数,在我的计算中它将返回0。现在它是固定的。如果结果为0,则可以尝试使用当前日期yearmm格式(例如:201603)和表中日期的yearmm格式(例如:201603),如果结果为0,则将其视为当前月份,否则为上一个月,希望能有所帮助:
SELECT company,
location,
sum(iif(d = 0, 0, 1)) cm,
sum(iif(d = 0, 1, 0)) pm
FROM (SELECT company,
location,
CONVERT(INT,
CONVERT(CHAR(4), GetDate(), 120) +
CONVERT(CHAR(2), GetDate(), 101)
) -
CONVERT(INT,
CONVERT(CHAR(4), date, 120) +
CONVERT(CHAR(2), date, 101)
) as d
FROM table) vw
GROUP BY company, location
如果结果为0,则可以尝试将当前日期减去yearmm格式(ex:201603)和表中日期的yearmm格式(ex:201603),否则将上个月视为当前月份,希望对您有所帮助:
SELECT company,
location,
sum(iif(d = 0, 0, 1)) cm,
sum(iif(d = 0, 1, 0)) pm
FROM (SELECT company,
location,
CONVERT(INT,
CONVERT(CHAR(4), GetDate(), 120) +
CONVERT(CHAR(2), GetDate(), 101)
) -
CONVERT(INT,
CONVERT(CHAR(4), date, 120) +
CONVERT(CHAR(2), date, 101)
) as d
FROM table) vw
GROUP BY company, location
这没有帮助,你能以符合你预期数据的临时表的形式提供测试数据吗?这没有帮助,你能以符合你预期数据的临时表的形式提供测试数据吗?谢谢,您能告诉我如何按位置显示currentmonth和Previous month的百分比差异作为新列吗?基于总数的百分比?从两个月开始?结果会是什么?Jorge,有一个问题是,如果当前月份是一月,日期中的月份是十二月,那么上个月的逻辑是否有效。据我所知,月份(日期)将是12,(月份(getDate())-1)将返回0,它可能不会添加到上一个月的总和。如果我错了,请纠正我。@DhananjayaKuppu嗯,你的问题问得很好。事实上,我不会修改我的答案。谢谢。谢谢,你能告诉我如何按位置显示currentmonth和Previous month的百分比差异作为新列吗?基于总数的百分比?从两个月开始?结果会是什么?Jorge,有一个问题是,如果当前月份是一月,日期中的月份是十二月,那么上个月的逻辑是否有效。据我所知,月份(日期)将是12,(月份(getDate())-1)将返回0,它可能不会添加到上一个月的总和。如果我错了,请纠正我。@DhananjayaKuppu嗯,你的问题问得很好。事实上,我不会修改我的答案。非常感谢。