1

次のような形式のテーブルがあります。分割したいので、月と年の列があります。2014年1月、その後、コストの別の列。したがって、事実上、各行は12の異なる行に分割されますが、私は一生の間、それにアプローチする方法を理解できません。どんな助けでも大歓迎です

    CREATE TABLE dbo.Line14(
    ItemID int IDENTITY(1,1) NOT NULL,
    Detail nvarchar(max) NULL,
    Type nvarchar(255) NULL,
    Cat nvarchar(255) NULL,
    Jan_14 money NULL,
    Feb_14 money NULL,
    Mar_14 money NULL,
    Apr_14 money NULL,
    May_14 money NULL,
    Jun_14 money NULL,
    Jul_14 money NULL,
    Aug_14 money NULL,
    Sep_14 money NULL,
    Oct_14 money NULL,
    Nov_14 money NULL,
    Dec_14 money NULL
) ON PRIMARY TEXTIMAGE_ON PRIMARY
GO 
4

2 に答える 2

3

UNPIVOTデータを列から行に変換する関数を使用できるはずです。

select itemid,
  detail,
  type,
  cat,
  Month,
  2014 as Year,
  value
from Line14
unpivot
(
  value
  for Month in (Jan_14, Feb_14, Mar_14, Apr_14,
                May_14, Jun_14, Jul_14, Aug_14,
                Sep_14, Oct_14, Nov_14, Dec_14)
) unpiv

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

結果は次のようになります。

| ITEMID | DETAIL | TYPE |  CAT |  MONTH | YEAR | VALUE |
---------------------------------------------------------
|      1 |   Test |    C | blah | Jan_14 | 2014 |    10 |
|      1 |   Test |    C | blah | Feb_14 | 2014 |    12 |
|      1 |   Test |    C | blah | Mar_14 | 2014 |    45 |
|      1 |   Test |    C | blah | Apr_14 | 2014 |    56 |
|      1 |   Test |    C | blah | May_14 | 2014 |    89 |
|      1 |   Test |    C | blah | Jun_14 | 2014 |    78 |
|      1 |   Test |    C | blah | Jul_14 | 2014 |    96 |
|      1 |   Test |    C | blah | Aug_14 | 2014 |    35 |
|      1 |   Test |    C | blah | Sep_14 | 2014 |    55 |
|      1 |   Test |    C | blah | Oct_14 | 2014 |    30 |
|      1 |   Test |    C | blah | Nov_14 | 2014 |    99 |
|      1 |   Test |    C | blah | Dec_14 | 2014 |   120 |
于 2013-02-14T21:47:53.287 に答える
0

説明どおりに新しいテーブルを作成しますinsert as select。次に、毎月の金額を取得し、月の値をハードコーディングする12のステートメントを記述します。

于 2013-02-14T21:44:33.163 に答える