2013-02-07 45 views
1

所以,我有以下日期SQL,多行一列

ID  NAME  MONTH    COUNT 

1  David  December2012  500 

2  Rob  December2012  320 

1  David  January2013  400 

2  Rob  January2013  280 

我試圖讓這個.......

ID  Name  December2012  January2013 

1  David  500    400 

2  Rob  320    280 

在哪裏我感到困惑的是如何我想要保留兩列,然後轉向其他兩個字段。任何人都知道我會如何做到這一點。

非常感謝您的幫助/時間。我從未發佈過其中的一個,非常感謝!

+2

你正在使用什麼RDBMS? –

+1

[你有什麼嘗試?](http://whathaveyoutried.com) –

回答

0

既然你沒有指定你正在使用的RDBMS,那麼你可以這樣做:

SELECT 
    ID, 
    NAME, 
    MAX(CASE WHEN MONTH = 'December2012' THEN "COUNT" END) AS "December2012", 
    MAX(CASE WHEN MONTH = 'January2013' THEN "COUNT" END) AS "January2013" 
FROM Tablename 
GROUP BY ID, Name; 
5

您沒有指定您正在使用的RDBMS。您可以支點使用聚合函數與CASE的表達在所有數據庫中的數據:

select id, name, 
    sum(case when month = 'December2012' then "count" end) December2012, 
    sum(case when month = 'January2013' then "count" end) January2013 
from yourtable 
group by id, name 

SQL Fiddle with Demo

如果您正在使用SQL Server 2005+或Oracle 11g,那麼你可以使用PIVOT功能:

select * 
from 
(
    select id, name, month, [count] 
    from yourtable 
) src 
pivot 
(
    sum([count]) 
    for month in (December2012, January2013) 
) piv 

參見SQL Fiddle with Demo

在SQL Server中,如果month的值是未知的,那麼你可以使用類似的動態SQL這樣的:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(month) 
        from yourtable 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT id, name,' + @cols + ' from 
      (
       select id, name, month, [count] 
       from yourtable 
      ) x 
      pivot 
      (
       sum([count]) 
       for month in (' + @cols + ') 
      ) p ' 

execute(@query) 

SQL Fiddle with Demo

所有版本產生的結果是:

| ID | NAME | DECEMBER2012 | JANUARY2013 | 
------------------------------------------- 
| 1 | David |   500 |   400 | 
| 2 | Rob |   320 |   280 | 
+0

This Worked!非常感謝。起初,我並不確定,因爲我不知道爲什麼要包括SUM;每個人每個月添加一行每行一行。但後來我注意到,當我拿出它時,我有空位,並且有多個記錄導致它們必須包含在groupby中。我還有一個問題想要完成。我會爲此發佈一個不同的線索,但是想要嘮叨你。我正在使用SQL Server Management Studio 2008.我對此非常陌生,隨時學習。謝謝! – user2051103

+0

@ user2051103通常,當您獲得問題的多個答案時,正常答案是首先接受答案。在這種情況下,我的答案首先被髮布。 – Taryn

+0

@ user2051103這個答案首先發布。請接受這個答案。 – Kermit