每行如何获得一个结果?我已经尝试过DISTINCT,但没有用

时间:2019-06-05 17:19:21

标签: sql oracle

我已经有了一个使用此名称的视图,并且目前效果很好。无论如何,我需要更多的过滤器...

我已经尝试过DISTINCT,但它不会影响结果。

:-)

实际结果显示N行以“ xxx”为COD_COMPLESSO,但我只需要一行COD_COMPLESSO ='xxx',另一行以COD_COMPLESSO ='yyy',依此类推...等等,我已经尝试添加在第一个和第二个SELECT(即使两个都选择)中都DISTINCT,但似乎没有用,请您能帮我吗?

3 个答案:

答案 0 :(得分:0)

对于整个分组中的每个不同分组,您都将获得一行。如果您检查了N行中的每一行,您将在每一行中的这些列之一中找到不同的值。

GROUP BY
NOME_COMPLESSO, COD_COMPLESSO,
MESE, ANNO,
ID_BM, NOME_BM,
ID_FORNITORE, NOME_FORNITORE,
DATE_REQUEST;

如果每个COD_COMPLESSO只需要一行,则从此开始,并注意您将必须删除或更改SUM()。

 GROUP BY COD_COMPLESSO

答案 1 :(得分:0)

大概,您想要这样的东西:

SELECT COD_COMPLESSO, NOME_COMPLESSO,
       SUM(CASE WHEN COD_STATUS_CON = 'OPN' THEN 1 ELSE 0 END) AS aperto,
       SUM(CASE WHEN COD_STATUS_CON = 'ONG' THEN 1 ELSE 0 END) AS in_corso,
       SUM(CASE WHEN COD_STATUS_CON = 'CLO' THEN 1 ELSE 0 END) AS chiuso
FROM V_RQM_REQUEST_BM rqm 
GROUP BY NOME_COMPLESSO, COD_COMPLESSO;

如果每个COD_COMPLESSO只需要一行,则选择其他列是没有意义的。有多个值。你要哪个?如果您确实希望看到某些东西,请选择一个聚合函数。 。 。通常是MIN()MAX()AVG()COUNT()LISTAGG()

答案 2 :(得分:0)

谢谢大家的回答。现在,我正在处理这个问题:

h5dwrite_f

正如您所看到的,我已经添加了WHERE和ORDER BY,无论如何我现在无法对其进行测试,目前我不在办公室,明天要整理,我将发布结果。同时...欢迎提出建议:-)