【问题标题】:How can I get one result per row? I've already tried with DISTINCT but it doesn't work如何每行获得一个结果?我已经尝试过 DISTINCT 但它不起作用
【发布时间】:2019-06-05 17:19:21
【问题描述】:

我已经获得了具有此名称的视图,并且它现在运行良好。无论如何,我需要更多过滤器...

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

SELECT DISTINCT
    COD_COMPLESSO,
    NOME_COMPLESSO,
    ID_BM,
    NOME_BM,
    ID_FORNITORE,
    NOME_FORNITORE,
    ANNO,
    MESE,
    DATE_REQUEST,
    SUM(rqm.aperto) AS num_aperto,
    SUM(rqm.in_corso) AS num_in_corso,
    SUM(rqm.chiuso) AS num_chiuso
FROM (
SELECT
    COD_COMPLESSO,
    NOME_COMPLESSO,
    ID_BM,
    NOME_BM,
    ID_FORNITORE,
    NOME_FORNITORE,
    ANNO,
    MESE,
    DATE_REQUEST,
    (CASE WHEN COD_STATUS_CON = 'OPN' THEN 1 ELSE 0 END) AS aperto,
    (CASE WHEN COD_STATUS_CON = 'ONG' THEN 1 ELSE 0 END) AS in_corso,
    (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,
    MESE, ANNO,
    ID_BM, NOME_BM,
    ID_FORNITORE, NOME_FORNITORE,
    DATE_REQUEST;

实际结果显示 N 行,“xxx”为 COD_COMPLESSO,但我只需要一行 COD_COMPLESSO = 'xxx',另一行 COD_COMPLESSO = 'yyy' 等等...我已经尝试添加一个DISTINCT 在第一个和第二个 SELECT 中(甚至在两者上),但它似乎不起作用,你能帮帮我吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您将获得整个分组中每个不同的行。如果您检查 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
    

    【讨论】:

      【解决方案2】:

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

      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()

      【讨论】:

        【解决方案3】:

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

         SELECT DISTINCT
          COD_COMPLESSO,
          NOME_COMPLESSO,
          SUM(rqm.aperto) AS num_aperto,
          SUM(rqm.in_corso) AS num_in_corso,
          SUM(rqm.chiuso) AS num_chiuso
        FROM (
         SELECT
          COD_COMPLESSO,
          NOME_COMPLESSO,
          ID_BM,
          NOME_BM,
          ID_FORNITORE,
          NOME_FORNITORE,
          ANNO,
          MESE,
          DATE_REQUEST,
          (CASE WHEN COD_STATUS_CON = 'OPN' THEN 1 ELSE 0 END) AS aperto,
          (CASE WHEN COD_STATUS_CON = 'ONG' THEN 1 ELSE 0 END) AS in_corso,
          (CASE WHEN COD_STATUS_CON = 'CLO' THEN 1 ELSE 0 END) AS chiuso
         FROM V_RQM_REQUEST_BM
         WHERE COD_COMPLESSO IS NOT NULL AND ID_BM IS NOT NULL AND ID_FORNITORE IS NOT NULL) 
             rqm
         GROUP BY
          COD_COMPLESSO, NOME_COMPLESSO,
          MESE, ANNO,
          ID_BM, NOME_BM,
          ID_FORNITORE, NOME_FORNITORE,
          DATE_REQUEST
          ORDER BY DATE_REQUEST;
        

        如您所见,我添加了 WHERE 和 ORDER BY,反正我现在无法测试,我现在不在办公室,明天早上我会发布我的结果。与此同时...欢迎提出建议:-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          • 2022-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-11
          相关资源
          最近更新 更多