0
EAVモデルSQLピボット例
create table people_details
(id number
, name varchar2(30)
, det_number number
, det_text varchar2(30)
, prop_id number
);
create table properties
(id number
, description varchar2(30)
);
insert into properties values (1,'EYE COLOR');
insert into properties values (2,'INCOME');
insert into properties values (3,'EDUCATION');
INSERT INTO people_details VALUES (1,'JOHN',NULL,'BLUE',1);
INSERT INTO people_details VALUES (2,'JOHN',5000,NULL,2);
INSERT INTO people_details VALUES (3,'JOHN',NULL,'HIGHSCHOOL',3);
INSERT INTO people_details VALUES (4,'PHILIP',NULL,'GREEN',1);
INSERT INTO people_details VALUES (5,'PHILIP',7000,NULL,2);
INSERT INTO people_details VALUES (6,'PHILIP',NULL,'COLLEGE',3);
INSERT INTO people_details VALUES (7,'SANDY',NULL,'BROWN',1);
INSERT INTO people_details VALUES (8,'SANDY',9000,NULL,2);
INSERT INTO people_details VALUES (9,'SANDY',NULL,'COLLEGE',3);
は今青い目または平均以上の収入を持つすべての人を選択します。 これは私が
WITH PEOPLE AS (
SELECT * FROM(
SELECT NAME, DESCRIPTION, NVL(DET_TEXT, TO_CHAR(DET_NUMBER)) AS DETAIL
FROM PEOPLE_DETAILS PPL
JOIN PROPERTIES PRO ON PPL.PROP_ID = PRO.ID
)
PIVOT (
MAX(DETAIL)
FOR DESCRIPTION IN ('EYE COLOR' as EYE_COLOR, 'EDUCATION' AS EDUCATION, 'INCOME' AS INCOME)
)
)
SELECT * FROM PEOPLE WHERE EYE_COLOR = 'BLUE'
UNION
SELECT * FROM PEOPLE WHERE INCOME > (SELECT AVG(INCOME) FROM PEOPLE);
やったことでこれを行うには、いくつかのよりよい方法はありますか?ここで私は収入を文字に変換し、平均関数はおそらく暗黙の変換を行います。プログラムで動作するかどうかは不明です。 これはどのように解決しますか?
実際には正しくありません。私たちはすべての属性を外に欲しい。私は(John、Blue、null、null) – user1941235