我有以下表:SQL:分割一列分成多个
CREATE TABLE yow(
userid INT,
itemid INT,
feedback INT,
value INT)
(用户ID,为itemid,反馈)可被认为是主键,其中每个这些元组的包含一个值。
我想要一个查询,它返回一个包含以下列的表: userid | itemid | col0 | col1 | COL2
凡COL0包含value
为yow
所有行,其中反馈= 0,和COL1包含value
其中反馈= 1等。
我有一个有点工作查询:
SELECT
yow.userid AS uid,
yow.itemid AS iid,
isNull(col0.value, 0) AS col0,
IsNull(col1.value, 0) AS col1,
IsNull(col2.value, 0) AS col2
FROM yow
LEFT JOIN yow AS col0 ON col0.userid=yow.userid AND col0.itemid=yow.itemid
LEFT JOIN yow AS col1 ON col1.userid=yow.userid AND col1.itemid=yow.itemid
LEFT JOIN yow AS col2 ON col2.userid=yow.userid AND col2.itemid=yow.itemid
WHERE col0.feedback = 0
AND col1.feedback = 1
AND col2.feedback = 2
GROUP BY uid, iid
的问题是,我可以有一个值(用户ID,商品ID)在COL1 COL2或而不是其他。与此查询,这些行会被过滤掉,而不是失踪细胞缺省为0。
。作为一个例子,我得到这样的:
+-------+-------+--------+--------+--------+
| UID | IID | COL0 | COL1 | COL2 |
+-------+-------+--------+--------+--------+
| 1 | 101 | 23 | 22 | 241 |
| 1 | 101 | 51 | 13 | 159 |
| 2 | 102 | 22 | 55 | 152 |
| 3 | 103 | 14 | 41 | 231 |
+-------+-------+--------+--------+--------+
而是我想是这样的,在col0的缺失值默认为0.
+-------+-------+--------+--------+--------+
| UID | IID | COL0 | COL1 | COL2 |
+-------+-------+--------+--------+--------+
| 1 | 101 | 23 | 22 | 241 |
| 1 | 101 | 51 | 13 | 159 |
| 1 | 102 | 0 | 15 | 142 |
| 2 | 102 | 22 | 55 | 152 |
| 2 | 103 | 0 | 45 | 92 |
| 3 | 103 | 14 | 41 | 231 |
+-------+-------+--------+--------+--------+
任何人都可以建议修复我的查询或建议更好的?我在H2上运行这个,所以我认为查询应该有点标准。谢谢:)
添加反馈列的选择,看看他们正在过滤。 –
@PreetSangha,谢谢。这是你的意思吗? https://gist.github.com/monsendag/f32957897950aa5bfb22 查询添加三个反馈列,其中第一个包含零,第二个包含零等。我应该寻找什么? – Dag