可以用重复的列来转置一个表吗?
现有表格:

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

09-26 08:21