2012-08-03 53 views
1

我有一個group by YEAR(mydate),MONTH(mydate)SQL服務器:組由功能上的某個字段選擇

我想選擇它們作爲一個獨特的領域像

SELECT SUM(Price),YEAR(mydate) + '/' + MONTH(mydate) 
FROM MyTable 
GROUP BY YEAR(mydate), MONTH(mydate) 

或這樣的事情。

mydatesmalldatetime

可能嗎?

+0

我不明白你要做什麼 - 這個查詢是否工作?或者,如果沒有,它以什麼方式不能按照你想要的方式工作? – 2012-08-03 09:21:35

+0

我想知道每年/每月的總和(價格) – 2012-08-03 09:30:17

+0

好的 - 但是不是那個查詢已經回答了這個問題嗎? – 2012-08-03 09:30:48

回答

7

試試這個:

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

你需要將它們轉換爲字符串

嘗試

SELECT convert(varchar(7), mydate ,111) 
FROM MyTable 
GROUP BY convert(varchar(7), mydate ,111) 
+0

我有錯誤,因爲mydate沒有在分組列表中提到 – 2012-08-03 09:34:43

+0

啊。應該檢查一下。編輯.. – podiluska 2012-08-03 09:36:05

-1

SELECT CAST(DATENAME(YY,指明MyDate)爲char(4))+' - '+ CAST(DATENAME(mm,mydate)AS VARCHAR(2))'Date' ,SUM(Price) FROM [My Table] GROUP BY DATENAME(yy,mydate) ,DATENAM E(WW,指明MyDate)

+1

請提供答案的解釋。 – Jeet 2016-07-04 06:34:07

+0

和**格式化**也是如此...... – 2017-04-06 11:43:08

0

對於MS SQL Server 2012中,有前導零:

CAST(YEAR(mydate) AS VARCHAR(4)) + '/' + 
RIGHT('00' + CAST(MONTH(mydate) AS VARCHAR(2)), 2) 
+1

或者您可以在SQL Server 2012中使用'FORMAT()'函數... – 2017-04-06 11:43:31

+0

非常感謝您的評論! – 2017-04-06 11:55:12

0

這裏我的解決方案:) 我需要一個SQLServer表中長大日期(列year_rif和month_rif)至從一個鏈接的Oracle表中插入新記錄(由月度職位鏡像在SQLSERVER Oracle表)

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) 

起初我進口開始承擔從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/[email protected]_INIZIO)+' 
    '')' 
    INSERT INTO uat.[dbo].ORACLE_BUDGET_MENSILI EXECUTE sp_executesql @SQL