Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Sql Server 2008 - Fatal编程技术网

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嗯,你的问题问得很好。事实上,我不会修改我的答案。非常感谢。