我正在嘗試將多條記錄中的單行組合成一條記錄中的多列。
假設我們有一個人員資料庫,他們都選擇了 2 個數字。但是,有些人只選擇了 1 個號碼,而沒有提交他們的第 2 個號碼。
這是一個簡化的示例,在我的實際生產資料庫中,它被放大到其中的幾個“數字”。
在這個例子中,人 3 還沒有選擇他們的第二個號碼。
我試過這個查詢:
SELECT ppl.*,
cn1.chosen_num AS first_num,
cn2.chosen_num AS second_num
FROM people AS ppl
LEFT JOIN
chosenNumbers AS cn1
LEFT JOIN
chosenNumbers AS cn2
WHERE ppl.numid = cn1.personid
AND ppl.numid = cn2.personid
AND cn1.type = 'first'
AND cn2.type = 'second'
但它不會回傳有關 Person3 的任何資訊,因為他們還沒有選擇第二個號碼。然而,我想要參與這個數字猜測的每個人的資料,但我希望能夠看到他們猜到的第一個和第二個數字。
這是我正在測驗的示例資料庫的轉儲。
BEGIN TRANSACTION;
CREATE TABLE people (numid INTEGER PRIMARY KEY, name TEXT);
INSERT INTO people VALUES(1,'Person1');
INSERT INTO people VALUES(2,'Person2');
INSERT INTO people VALUES(3,'Person3');
CREATE TABLE chosenNumbers (numid INTEGER PRIMARY KEY, chosen_num INTEGER, type TEXT, personid INTEGER, FOREIGN KEY(personid) REFERENCES people(numid));
INSERT INTO chosenNumbers VALUES(1,101,'first',1);
INSERT INTO chosenNumbers VALUES(2,102,'second',1);
INSERT INTO chosenNumbers VALUES(3,201,'first',2);
INSERT INTO chosenNumbers VALUES(4,202,'second',2);
-- Person 3 hasn't chosen their 2nd number yet..
-- But I want data on them, and the query above
-- doesn't work.
INSERT INTO chosenNumbers VALUES(5,301,'first',3);
COMMIT;
我也很高興有人告訴我如何將其擴展為 3 個數字或 4 個數字,甚至更多。
uj5u.com熱心網友回復:
您可以使用條件聚合:
SELECT p.*,
MAX(CASE WHEN c.type = 'first' THEN c.chosen_num END) AS first_num,
MAX(CASE WHEN c.type = 'second' THEN c.chosen_num END) AS second_num
FROM people AS p LEFT JOIN chosenNumbers AS c
ON p.numid = c.personid
GROUP BY p.numid;
您可以擴展代碼以獲得更多列。
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/411066.html
標籤:
上一篇:減去視窗內的數字
下一篇:嘗試更改new_manager.user.is_employee=False并將其設定為new_manager.user.is_manager=True,但不起作用
