誰かがより良いタイトルを知っていれば、それを変更してください。シンプルで純粋なSqlクエリ(重複した結果を取り除く)
私の試みは最高にmediacoreであることを知っています。あなたがもっと良いことを知っていれば、分かち合いましょう。私はそれが明確でシンプルな維持しようとします:
私のデータベーステーブル:
ID | Category | Number | NumberInCategory |
1 A 31 101
2 B 31 107
3 C 31 121
4 A 32 191
5 A 33 165
6 B 32 156
7 C 32 127
私は出力として必要なもの:
Number | A | B | C
31 101 107 121
32 191 156 127
33 165 NULL NULL
私の試み:
SELECT (SELECT DISTINCT(Number) FROM MYDB V WHERE F.ID = V.ID) AS Id,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'A') AS CategoryA ,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'B') AS CategoryB,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'C') AS CategoryC
FROM MYDB F;
マイ結果:
31|101|107|121
31|101|107|121
31|101|107|121
32|191|156|127
33|165||
32|191|156|127
32|191|156|127
私はちょうどこれが働く方法を見つけるように見える。
I誰もがここで助けたい終わりhttps://www.tutorialspoint.com/execute_sql_online.php
BEGIN TRANSACTION;
/* Create a table called SAMPLE */
CREATE TABLE MYDB(Id integer PRIMARY KEY, Category text, Number integer, NumberInCategory integer);
/* Create few records in this table */
INSERT INTO MYDB VALUES(1,'A',31,101);
INSERT INTO MYDB VALUES(2,'B',31,107);
INSERT INTO MYDB VALUES(3,'C',31,121);
INSERT INTO MYDB VALUES(4,'A',32,191);
INSERT INTO MYDB VALUES(5,'A',33,165);
INSERT INTO MYDB VALUES(6,'B',32,156);
INSERT INTO MYDB VALUES(7,'C',32,127);
COMMIT;
/* Display all the records from the table */
SELECT * FROM MYDB;
SELECT (SELECT DISTINCT(Number) FROM MYDB V WHERE F.ID = V.ID) AS Id,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'A') AS CategoryA ,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'B') AS CategoryB,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'C') AS CategoryC
FROM MYDB F;
EDIT 単純GROUP BYのための完全なスクリプトが.____仕事をしていませんです。
SELECT (SELECT Number FROM MYDB V WHERE F.ID = V.ID) AS Id,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'A') AS CategoryA ,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'B') AS CategoryB,
(SELECT NumberInCategory FROM MYDB V WHERE F.Number = V.Number AND Category = 'C') AS CategoryC
FROM MYDB F
GROUP BY NUMBER;
結果:
31|101|107|121
32|191|156|127
33|165||
(@Gordon Linoffによる)に認められた回答からaproachが良いですが。
次の質問に答えを試しますSagiから:https://stackoverflow.com/questions/45920094/sql-server-trying-to-de-normalize-my-table/45920185?noredirect=1# comment78800061_45920185 – Eli
あなたは3つのカテゴリしか持たないのでしょうか? – Greenspark
@Greensparkこの場合、私は有限の金額を持っています(それらの3つだけ) – cantdoanything33