2017-06-04 48 views
0

我有一個Users表,其中​​列的數據類型爲DateTime。現在,我想顯示我的數據是這樣的:將月份顯示爲SQL Server中的列

Jan | Feb | Mar | So on..... 
-------------------- 
2 | 3 | 5 | 

該數字顯示卡每月過期的數量。

這裏是我的嘗試:

DECLARE @Month TABLE 
(
    Id INT, 
    Name VARCHAR(10) 
); 

INSERT INTO @Month (Id, Name) 
VALUES (1, 'Jan'), (2, 'Feb'), (3, 'Mar'), (4, 'Apr'), (5, 'May'), 
     (6, 'Jun'), (7, 'Jul'), (8, 'Aug'), (9, 'Sep'), (10, 'Oct'), 
     (11, 'Nov'), (12, 'Dec'); 

SELECT COUNT('t'), M.Name 
FROM Users U 
INNER JOIN @Month M ON M.Id = DATEPART(MONTH, U.CARD_EXPIRY) 
WHERE MyCondition 
GROUP BY M.Id, M.Name 
ORDER BY M.Id 

但數據被返回的行明智的,是這樣的:由

C  Name 
------------- 
2764 Jan 
3065 Feb 
2849 mar 
2158 Apr 
2503 May 
2925 Jun 
2109 Jul 
1399 Aug 
1583 Sep 
1820 Oct 
1552 Nov 
1912 Dec 
+0

https://stackoverflow.com/a/185548/3270427 – McNets

+0

我需要短名稱現在:) – user960567

+1

爲Fa r據我所知您正在尋找PIVOT解決方案。 https://blogs.msdn.microsoft.com/spike/2009/03/03/pivot-tables-in-sql-server-a-simple-sample/ – McNets

回答

2

您可以使用PIVOT,但你也可以你組,對於axample:

SELECT sum(case when DATEPART(MONTH, U.CARD_EXPIRY)=1 then 1 else 0) as Jan 
     ,sum(case when DATEPART(MONTH, U.CARD_EXPIRY)=2 then 1 else 0) as Feb 
     ,sum(case when DATEPART(MONTH, U.CARD_EXPIRY)=3 then 1 else 0) as mar 
    ................... 
     ,sum(case when DATEPART(MONTH, U.CARD_EXPIRY)=12 then 1 else 0) as Dec 
FROM Users U 
GROUP BY M.Id, M.Name 
相關問題