可以用重复的列来转置一个表吗?
现有表格:
user_id question_id body
1 1 'Text1 1'
1 1 'Text1 1-2'
1 2 'Text1 2'
1 3 'Text1 3'
2 1 'Text2 1'
2 2 'Text2 2'
交叉表或解决方案基于
MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS 'question1'
不适用于此方案,因为总是匹配重复属性的最后一次出现。
我想对问题体执行搜索,但如果没有换位表,我不知道如何执行。
例如,我想在
question1='...' AND question2='...'
最佳答案
这是一个关系划分的例子。获取所需内容的两种示例查询技术:
SELECT user_id
FROM tbl
WHERE question_id = 1
AND body = 'Text1 1'
INTERSECT
SELECT user_id
FROM tbl
WHERE question_id = 2
AND body = 'Text1 2';
或:
SELECT t1.user_id
FROM tbl t1
JOIN tbl t2 USING (user_id)
WHERE t1.question_id = 1
AND t1.body = 'Text1 1'
AND t2.question_id = 2
AND t2.body = 'Text1 2';
-> sqlfiddle demo
在这个相关的问题下面找到更多:
How to filter SQL results in a has-many-through relation
crosstab()
来自附加模块tablefunc只是以修改后的方式显示数据的一种方式。但是您正在寻找一种查询技术。这不是展示问题。您可以在这里找到许多
crosstab()
的例子,因此,使用a search like this one。