1

だから私は次の日付を持っています

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つの列を保持し、他の2つのフィールドをピボットする方法です。誰もが私がこれを行う方法を知っています。

お手数をおかけしますが、よろしくお願いいたします。私はこれらのいずれかを投稿したことがありません、そして応答は大歓迎です!

4

2 に答える 2

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 FiddlewithDemoを参照してください

SQL Server2005+またはOracle11gを使用している場合は、次のPIVOT関数を使用できます。

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

SQL FiddlewithDemoを参照してください。

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 FiddlewithDemoを参照してください

すべてのバージョンで次の結果が得られます。

| ID |  NAME | DECEMBER2012 | JANUARY2013 |
-------------------------------------------
|  1 | David |          500 |         400 |
|  2 |   Rob |          320 |         280 |
于 2013-02-07T14:30:35.693 に答える
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;
于 2013-02-07T14:30:44.810 に答える