如何将不同查询的结果合并为一个?

问题描述:

我在一列中获得了情绪分析的结果。我想展示一下每个数字代表和计数,像这样:如何将不同查询的结果合并为一个?

Neg | Neutral | Pos 
---------+-----+----- 
    30 | 55 | 100 

我试过,我在互联网上发现了许多不同的方法,但没有成功。看起来db2语法经常变化,而且我发现的所有文档都不适用于我当前的bluemix帐户。

我能得到的最接近的是UNION:

SELECT COUNT(*) as NEGATIVE  FROM C7 WHERE SENTIMENT = 1 
union 
SELECT COUNT(*) as NEUTRAL  FROM C7 WHERE SENTIMENT = 2 
union 
SELECT COUNT(*) as Pos   FROM C7 WHERE SENTIMENT = 3 

然而,这给了我:

NEGATIVE 
-------- 
    30 
    55 
    100 

我如何可以结合每个查询并排侧的结果吗?


我试图从后枢转在DB2的答案,但我得到了错误:

SELECT 
    C7.SENTIMENT, 
    COUNT(CASE WHEN C7.SENTIMENT = 1 THEN Value END) AS NEGATIVE, 
    COUNT(CASE WHEN C7.SENTIMENT = 2 THEN Value END) AS NEUTRAL, 
    COUNT(CASE WHEN C7.SENTIMENT = 3 THEN Value END) AS POSITIVE, 
FROM C7 
GROUP BY C7.SENTIMENT 

SQL0206N:SQL0206N “VALUE” 是不是在使用它的上下文中无效。 SQLSTATE = 42703

SELECT DISTINCT 
    C7.SENTIMENT, 
    (SELECT value FROM C7 WHERE C7.SENTIMENT = 1) AS VERY_NEGATIVE, 
    (SELECT value FROM C7 WHERE C7.SENTIMENT = 2) AS NEGATIVE, 
    (SELECT value FROM C7 WHERE C7.SENTIMENT = 3) AS NEUTRAL 
FROM C7 

SQL0206N:SQL0206N “VALUE” 不是在其被使用的上下文中有效。 SQLSTATE = 42703

+1

可能重复的[DB2中的透视](https://*.com/questions/15529107/pivoting-in-db2) –

+0

@ Clockwork-Muse Nope,尝试所有这些答案,非工作,将更新我的文章为什么不是这样。不管怎么说,还是要谢谢你。 –

+0

它可能认为'VALUE'在这里被用作关键字(因为它是一个保留字,尽管它至少可以在某些情况下用作列名)。但是除非你试图引用的内容可以为null,你不在乎它是什么,所以你可以用一个常量值('1'是一个最喜欢的值)。 (从我的经验专栏 - 没有发现产生一个不同的例外,所以不可能源于此) –

好了,再处理几个答案后,我终于得到了我一直在寻找:

SELECT DISTINCT 
    (SELECT COUNT(SENTIMENT) FROM C7 WHERE C7.SENTIMENT = 1) AS NEGATIVE, 
    (SELECT COUNT(SENTIMENT) FROM C7 WHERE C7.SENTIMENT = 2) AS NEUTRAL, 
    (SELECT COUNT(SENTIMENT) FROM C7 WHERE C7.SENTIMENT = 3) AS POSITIVE 
FROM C7 

这看起来像是我徘徊在很长一段时间,但不能因为有些帖子用奇怪的表名和价值观来回答这个问题。

所以基本上,要获得彼此相邻的查询,您必须使用多个SELECT s。

此外,请注意我使用DISTINCT,否则它会为我的数据库中的每一行都提供相同数据的副本。

+0

....'DISTINCT'是不必要的,因为如果你走这条路线,你应该做一些不同的事情,或者把所有这三个都放到'VALUES'语句中,或者使用虚拟表('sysibm。sysdummy1')给自己一行。如果幸运的话,系统能够查看该查询并优化“DISTINCT”,否则你只是在惩罚自己。 –

+0

@ Clockwork-Muse确定,发布一个答案。 –