私は
SELECT mysqlのNULLセルを削除しますか?
を得ることができるように、私はすべての細胞である場合、テーブルを取得することが可能である場合、私は疑問に思う、このテーブルを選択します。この
のようなテーブルYEARを持っています(1つの行/フィールドではありません)。
私は
SELECT mysqlのNULLセルを削除しますか?
を得ることができるように、私はすべての細胞である場合、テーブルを取得することが可能である場合、私は疑問に思う、このテーブルを選択します。この
のようなテーブルYEARを持っています(1つの行/フィールドではありません)。
これは本当の痛みですが、可能です。その考え方は、各列の値を列挙し、それらを一緒に「結合」することです。 join
は本当にgroup by
です:
select max(`2014`) as `2014`,
max(`2015`) as `2015`,
. . .
from ((select (@rn2014 := @rn2014 + 1) as rn, `2014`,
NULL as `2015`, NULL as `2016`, NULL as `2017`
from year
where `2014` is not null
) union all
(select (@rn2015 := @rn2015 + 1) as rn, NULL, `2015`, NULL, NULL
from year
where `2015` is not null
) union all
. . .
) y
group by rn;
私はその著者の利用MySQLを知っているが、考え方は同じ
クレートテーブル
create table _year
(
_y_2014 text,
_y_2015 text,
_y_2016 text,
_y_2017 text
)
挿入データであるPostgreSQLの解決策この問題を、 を書きますテーブルに入れる
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select 'A',NULL,NULL,NULL;
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select NULL,'C',NULL,NULL;
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select NULL,'D',NULL,NULL;
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select NULL,'E',NULL,NULL;
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select 'B',NULL,NULL,NULL;
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select NULL,NULL,NULL,'F';
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select NULL,NULL,NULL,'G';
INSERT INTO _year(_y_2014, _y_2015, _y_2016, _y_2017) select NULL,NULL,'H',NULL;
選択クエリ:
select
e1.val as "2014",
e2.val as "2015",
e3.val as "2016",
e4.val as "2017"
from (SELECT counter from generate_series(1, (select count(*) from _year)) as counter) cc
left join (SeLECT
row_number() OVER (ORDER BY _y_2014) AS i,
_y_2014 as val,
'2014'::text as _y
FROM _year
where _y_2014 is not null) e1 on e1.i = cc.counter
left join (SeLECT
row_number() OVER (ORDER BY _y_2015) AS i,
_y_2015 as val,
'2015'::text as _y
FROM _year
where _y_2015 is not null) e2 on e2.i = cc.counter
left join (SeLECT
row_number() OVER (ORDER BY _y_2016) AS i,
_y_2016 as val,
'2016'::text as _y
FROM _year
where _y_2016 is not null) e3 on e3.i = cc.counter
left join (SeLECT
row_number() OVER (ORDER BY _y_2017) AS i,
_y_2017 as val,
'2017'::text as _y
FROM _year
where _y_2017 is not null) e4 on e4.i = cc.counter
where e1.val is not null or e2.val is not null or e3.val is not null or e4.val is not null
なぜこのような非正規化データを保存しますか?なぜあなたはこれをこのように表示する必要がありますか?そして、「A C」が返され、「A D」または「A E」ではないことをどのように定義しますか?クライアントでそのまま実行してください.... – dnoeth
ASCをソートするだけで、 'B E H G'、' D NULL F'、 'NULL C NULL NULL '(desc)にすることができます。テーブルを1行で見るのではなく、すべての行と列が独立しているかどうかは疑問です。私はアルファベットが上がることができるように、上のすべてのNULL値を削除したい。 –