为什么此查询会返回不需要的结果?

时间:2009-01-27 13:34:39

标签: sql-server sql-server-2005 pivot

早上好,

我对此查询有疑问:

SELECT  
    P.txt_nome AS Pergunta,   
    IP.nome AS Resposta,   
    COUNT(*) AS Qtd   
FROM  
    tb_resposta_formulario RF   
    INNER JOIN formularios F ON  
        F.id_formulario = RF.id_formulario   
    INNER JOIN tb_pergunta P ON  
        P.id_pergunta = RF.id_pergunta   
    INNER JOIN tb_resposta_formulario_combo RFC ON  
        RFC.id_resposta_formulario = RF.id_resposta_formulario   
    INNER JOIN itens_perguntas IP ON  
        IP.id_item_pergunta = RFC.id_item_pergunta   
WHERE  
    RF.id_formulario = 2   
GROUP BY    
    P.txt_nome,   
    IP.nome   

这是此查询的实际结果:

| Pergunta | Resposta | Qtd |
| Produto |组合1MB | 3 |
| Produto |组合2MB | 5 |
| Produto |组合4MB | 1 |
| Produto |组合6MB | 1 |
| Produto |组合8MB | 4 |
|Região| MG | 3 |
|Região| PR | 2 |
|Região| RJ | 3 |
|Região| SC | 1 |
|Região| SP | 5 |

这些是我期待的结果:

|产品| Região| Qtd |
|组合1MB | MG | 3 |
|组合2MB | SP | 5 |
|组合4MB | SC | 1 |
|组合6MB | RJ | 1 |
|组合8MB |公关| 2 |

我正在使用PIVOT和UNPIVOT操作符,但结果并不令人满意。

之前有没有人遇到过这种情况?你有什么见解可以提供吗?

我已经分析了这些链接:

ATT, Pelegrini

1 个答案:

答案 0 :(得分:2)

“明显”的答案是:因为查询不正确。我们对表结构以及您想要实现的目标一无所知。

关于查询中至少有一个非常基本的问题:您希望回复中的列|Produto | Região |Qtd|,但查询会明确选择列PerguntaReposta和{{ 1}},这与你得到的结果一致。

你对SQL的熟悉程度如何?阅读介绍性文本可能是值得的。我建议this作为一个很好的介绍。 (使用Oracle,但原则是相同的)

相关问题