2

是否可以转置具有重复列的表?

现有表:

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'

在这种情况下不适用,因为总是匹配重复属性的最后一次出现。

我想对问题正文进行搜索,但如果没有转置表,我不知道该怎么做。
例如,我想在哪里找到 user_idquestion1='...' AND question2='...'

4

1 回答 1

1

这是一个关系划分的例子。获得所需内容的两个示例查询技术:

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 演示

在这个相关问题下找到更多信息:
如何过滤 SQL results in a has-many-through relationship

crosstab()来自附加模块tablefunc只是一种以修改方式显示数据的方法。但是您正在寻找一种查询技术。这不是显示问题。您也可以在 SO 上
找到许多示例,使用类似这样的搜索crosstab()

于 2012-12-19T17:28:19.087 回答