Today: Yesterday: Total: Online:
カテゴリー
その他
  • RSS1.0
  • RSS2.0
  • atom0.3
  • valid XHTML1.0
  • valid CSS2
  • Credit
RSSリーダーで購読する | この日記のはてなブックマーク数 | プロフィール
コメントが一番多い記事(233コメント):人の心理の裏をかくホームページ集客術:リピータになってもらうためには
ツイートが一番多い記事(94ツイート):ちょっと待て!twitterやfacebookに子供の写真を掲載する親達への警告
いいねが一番多い記事(574いいね):facebookスパムに要注意。なりすましの見分け方とアカウント乗っ取りの手口(2013年度版)

カテゴリー » SQL May 29, 2019

縦横変換SQL2 ID:1559090308


----------------
id,col1,col2
----------------
1,a,NULL
1,NULL,b
----------------

----------------
id,col1,col2
----------------
1,a,b
----------------

にするには
----------------------------

select
a.id,
a.col1,
b.col2
from
ta2 a
inner join
ta2 b
on a.id = b.id
where
a.col1 is not null
and
b.col2 is not null
----------------------------

また

----------------
id,col1,col2
----------------
1,a,NULL
1,NULL,b
2,c,null
3,null,d
----------------

----------------
id,col1,col2
----------------
1,a,b
2,c,null
3,null,d
----------------

とするには

---両方カラムがあるフィールドを抽出
select
a.id,
a.col1,
b.col2
from
ta2 a
inner join
ta2 b
on a.id = b.id
where
a.col1 is not null
and
b.col2 is not null

union all
--col1だけあるフィールドを抽出
select
a.id,
a.col1,
b.col2
from
ta2 a
inner join
ta2 b
on a.id = b.id
where
a.col1 is not null
and
a.id not in
(
select
a.id
from
ta2 a
inner join
ta2 b
on a.id = b.id
where
a.col1 is not null
and
b.col2 is not null
)
union all
--col2だけあるフィールドを抽出
select
a.id,
a.col1,
b.col2
from
ta2 a
inner join
ta2 b
on a.id = b.id
where
b.col2 is not null
and
a.id not in
(
select
a.id
from
ta2 a
inner join
ta2 b
on a.id = b.id
where
a.col1 is not null
and
b.col2 is not null
)



あとは、以下のページも参考に


複数行のグループデータを1行にまとめるSQL
https://ginpro.winofsql.jp/article/253189068.html


縦横の変換が、数値であれば、SUMを使うともっとシンプルにできる
https://johobase.com/sqlserver-expand-data-horizontally/

MAXを使えば、文字もOK
https://qiita.com/k24d/items/79bc4828c918dfeeac34
SELECT uid,
max(CASE WHEN key = 'c1' THEN value END) AS c1,
max(CASE WHEN key = 'c2' THEN value END) AS c2,
max(CASE WHEN key = 'c3' THEN value END) AS c3
FROM vtable
GROUP BY uid
— posted by midilin @ 09:38AM | Comment(0)

コメントをどうぞ。名前(ペンネーム)は必須です。URLはオプションです。

Comment Form
名前(ペンネーム): 文字色:
リンク作成 »
スパム対策画像認証(右に表示されている画像の番号を入れてください):
下のアイコンをクリックするとテキストエリアに挿入できます
:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

←メールアドレスを入力しておくと midilin がレスをした際に通知します: