簡體   English   中英

高效地將列轉換為行

[英]Transposing Columns to Rows Efficiently

你能幫我這個項目嗎? 我確實研究了先前提出的問題,但是它們似乎無法解決這種獨特的情況。

樣本數據:

 Member |    DOS    |  Dx1   |  Dx2  |  Dx3  | Dx4  | Dx5
 12345  | 1/1/2011  | 12142  | 12345 | 65657 | 5657 | 568
 56484  | 3/5/2011  | 568    | 56785 | 5695  | 575  | 168
 56872  | 2/12/2011 | 567    | 567   |

我需要看的是:

 Member DOS DX Seq
 12345 1/1/2011 12142 Dx1
 12345 1/1/2011 12345 Dx2
 12345 1/1/2011 65657 Dx3

等等。 僅顯示那些Dx不為空-因此對於56872,我們只會看到Dx1和Dx2,而對於其他2,我們將看到所有5個Dx的記錄。

有人可以幫助我嗎? 謝謝。

這種數據轉換稱為UNPIVOT 不幸的是,MySQL沒有取消旋轉功能,但是您可以通過幾種不同的方式復制該功能。

您可以使用UNION ALL查詢將每個列值轉換為行:

select member, dos, dx, seq
from
(
  select member, dos, dx1 as dx, 'Dx1' as seq
  from yourtable
  union all
  select member, dos, dx2 as dx, 'Dx2' as seq
  from yourtable
  union all
  select member, dos, dx3 as dx, 'Dx3' as seq
  from yourtable
  union all
  select member, dos, dx4 as dx, 'Dx4' as seq
  from yourtable
  union all
  select member, dos, dx5 as dx, 'Dx5' as seq
  from yourtable
) d
where dx is not null
order by member, seq;

請參閱帶有演示的SQL Fiddle 此方法將為您提供結果,但在較大的表上可能效率不高。

另一種方法是在虛擬表上使用CROSS JOIN:

select member, dos, dx, seq
from
(
  select t.member, t.dos, 
    case s.seq
      when 'Dx1' then dx1
      when 'Dx2' then dx2
      when 'Dx3' then dx3
      when 'Dx4' then dx4
      when 'Dx5' then dx5
    end DX,
    s.seq
  from yourtable t
  cross join
  (
    select 'Dx1' as seq union all
    select 'Dx2' as seq union all
    select 'Dx3' as seq union all
    select 'Dx4' as seq union all
    select 'Dx5' as seq
  ) s
) d
where dx is not null
order by member, seq;

請參閱帶有演示的SQL Fiddle 兩者都給出結果:

| MEMBER |                             DOS |    DX | SEQ |
|--------|---------------------------------|-------|-----|
|  12345 |  January, 01 2011 00:00:00+0000 | 12142 | Dx1 |
|  12345 |  January, 01 2011 00:00:00+0000 | 12345 | Dx2 |
|  12345 |  January, 01 2011 00:00:00+0000 | 65657 | Dx3 |
|  12345 |  January, 01 2011 00:00:00+0000 |  5657 | Dx4 |
|  12345 |  January, 01 2011 00:00:00+0000 |   568 | Dx5 |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM