Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Datetime_Aggregation - Fatal编程技术网

SQL Server:按字段上的函数分组,然后选择

SQL Server:按字段上的函数分组,然后选择,sql,sql-server,datetime,aggregation,Sql,Sql Server,Datetime,Aggregation,我有一个分组,按年份(mydate)、月份(mydate) 我想选择他们作为一个独特的领域,如 SELECT SUM(Price),YEAR(mydate) + '/' + MONTH(mydate) FROM MyTable GROUP BY YEAR(mydate), MONTH(mydate) 或者类似的事情 mydate是smalldatetime 有可能吗?试试这个: SELECT cast(YEAR(mydate) as CHAR(4))+'/'+cast(MONTH(mydate

我有一个
分组,按年份(mydate)、月份(mydate)

我想选择他们作为一个独特的领域,如

SELECT SUM(Price),YEAR(mydate) + '/' + MONTH(mydate)
FROM MyTable
GROUP BY YEAR(mydate), MONTH(mydate)
或者类似的事情

mydate
smalldatetime

有可能吗?

试试这个:

SELECT cast(YEAR(mydate) as CHAR(4))+'/'+cast(MONTH(mydate) as varchar(2))
FROM MyTable
Group by YEAR(mydate),MONTH(mydate)

您需要将它们转换为字符串

试一试


对于MS SQL Server 2012,带前导零:

CAST(YEAR(mydate) AS VARCHAR(4)) + '/' +
RIGHT('00' + CAST(MONTH(mydate) AS VARCHAR(2)), 2)
这是我的解决方案:) 我需要在sqlserver表中获取较旧的日期(列year\u rif和month\u rif),以便从链接的oracle表中插入较新的记录(按月度作业在sqlserver中镜像oracle表)

在首次导入时,我假设从2016年1月开始获取数据 全部工作是:

    DECLARE @anno_INIZIO int
    DECLARE @mese_INIZIO int
--get max year/mont avaible in mirrored table
    select top(1) @mese_INIZIO= mese_rif,@anno_INIZIO=anno_rif from dbo.ORACLE_BUDGET_MENSILI group by  mese_rif,anno_rif order by max(mese_rif/12+anno_rif) desc
--
    set @anno_inizio=coalesce(@anno_inizio,2016)
    set @mese_INIZIO=coalesce(@mese_INIZIO,1)
-- query to linked oracle to get into table newer data
    SET @SQL='select * FROM OPENQUERY(ADL_REP,''
    SELECT CODICE_UO,ANNO_RIF,MESE_RIF,ID_CLASSE,BUDGET,ORE_MENSILI_OBIETTIVO FROM ADL.BUDGET_MENSILI where  mese_rif/12+anno_rif > '+convert(varchar(255),@mese_INIZIO/12+@anno_INIZIO)+'
    '')'
    INSERT INTO uat.[dbo].ORACLE_BUDGET_MENSILI EXECUTE sp_executesql @SQL

我不明白你想做什么-这个查询有效吗?或者如果没有:在什么方面它不能像你们希望的那样工作?我想知道总和(价格)每年/每月-但该查询是否已经回答了该问题?我有错误,因为分组列表中未提及mydate。我有错误,因为分组列表中未提及mydate。请提供答案的解释。虽然此代码可以回答该问题,提供关于如何和/或为什么解决问题的额外信息将提高答案的长期价值。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。提到为什么这个答案比其他答案更合适也没什么坏处。
CAST(YEAR(mydate) AS VARCHAR(4)) + '/' +
RIGHT('00' + CAST(MONTH(mydate) AS VARCHAR(2)), 2)
DECLARE @anno_INIZIO int
DECLARE @mese_INIZIO int

select top(1) @mese_INIZIO= mese_rif,@anno_INIZIO=anno_rif 
 from dbo.ORACLE_BUDGET_MENSILI 
 group by  mese_rif,anno_rif 
 order by max(mese_rif/12+anno_rif) desc

set @anno_inizio=coalesce(@anno_INIZIO ,2016)
set @mese_INIZIO=coalesce(@mese_INIZIO,1)
    DECLARE @anno_INIZIO int
    DECLARE @mese_INIZIO int
--get max year/mont avaible in mirrored table
    select top(1) @mese_INIZIO= mese_rif,@anno_INIZIO=anno_rif from dbo.ORACLE_BUDGET_MENSILI group by  mese_rif,anno_rif order by max(mese_rif/12+anno_rif) desc
--
    set @anno_inizio=coalesce(@anno_inizio,2016)
    set @mese_INIZIO=coalesce(@mese_INIZIO,1)
-- query to linked oracle to get into table newer data
    SET @SQL='select * FROM OPENQUERY(ADL_REP,''
    SELECT CODICE_UO,ANNO_RIF,MESE_RIF,ID_CLASSE,BUDGET,ORE_MENSILI_OBIETTIVO FROM ADL.BUDGET_MENSILI where  mese_rif/12+anno_rif > '+convert(varchar(255),@mese_INIZIO/12+@anno_INIZIO)+'
    '')'
    INSERT INTO uat.[dbo].ORACLE_BUDGET_MENSILI EXECUTE sp_executesql @SQL