【问题标题】:Qlik Sense : SQL With StatementQlik Sense:带有语句的 SQL
【发布时间】:2017-05-16 12:32:59
【问题描述】:

我正在使用 Qlik Sense Desktop 来创建报告。 但是,我想使用此请求加载数据:

WITH ventes AS (SELECT        Reservations.re_numero AS IDSession, InscriptionsLignes.il_montantLigneHT AS VenteSession, Reservations.re_nom AS NomSession, Tiers.ti_nom AS NomClient, CASE WHEN Tiers_2.ti_nom + ' ' + Tiers_2.ti_prenom IS NULL THEN 'Non affecté' ELSE Tiers_2.ti_nom + ' ' + Tiers_2.ti_prenom END AS NomCommercial
                                     FROM            Reservations INNER JOIN
                                                               InscriptionsEntetes ON Reservations.re_numero = InscriptionsEntetes.in_reservation INNER JOIN
                                                               InscriptionsLignes ON InscriptionsEntetes.in_numero = InscriptionsLignes.il_inscription INNER JOIN
                                                               InscriptionsTiers ON InscriptionsEntetes.in_numero = InscriptionsTiers.it_inscription AND InscriptionsLignes.il_inscription = InscriptionsTiers.it_inscription INNER JOIN
                                   Tiers ON InscriptionsTiers.it_tiers = Tiers.ti_identifiant LEFT OUTER JOIN
                                   Tiers AS Tiers_2 ON InscriptionsEntetes.in_idTiersConseiller = Tiers_2.ti_identifiant
                                     WHERE        (InscriptionsTiers.it_typeRattachement = '01') AND (Reservations.re_etat <> 3) AND (Reservations.re_annulation = 0) AND (InscriptionsEntetes.in_Etat <> '4')), couts AS
    (SELECT        Reservations_1.re_numero AS IDSession, ReservationsProduits.rp_montantPrevu AS Couts
      FROM            Reservations AS Reservations_1 INNER JOIN
                                ReservationsProduits ON Reservations_1.re_numero = ReservationsProduits.rp_numeroReservation
      WHERE        (Reservations_1.re_etat <> 3) AND (Reservations_1.re_annulation = 0)), tot_couts AS
    (SELECT        IDSession, SUM(Couts) AS couts_total
      FROM            couts AS couts_1
      GROUP BY IDSession), tot_ventes AS
    (SELECT        IDSession, SUM(VenteSession) AS ventes_total
      FROM            ventes AS ventes_1
      GROUP BY IDSession)
    SELECT        tvn.IDSession, tvn.ventes_total, tct.couts_total, ventes_2.NomSession, ventes_2.NomClient, ventes_2.VenteSession, ventes_2.VenteSession - tct.couts_total / (tvn.ventes_total / ventes_2.VenteSession) AS marge
     FROM            tot_ventes AS tvn INNER JOIN
                              tot_couts AS tct ON tvn.IDSession = tct.IDSession INNER JOIN
                              ventes AS ventes_2 ON tvn.IDSession = ventes_2.IDSession
     WHERE        (ventes_2.VenteSession <> 0)
     ORDER BY tvn.IDSession

如您所见,我正在使用 SQL With 语句,但它在 Qlik 上不起作用,“With”是他们所说的未知语句

有人可以帮助我吗?

【问题讨论】:

    标签: sql reporting common-table-expression qliksense


    【解决方案1】:

    如果您之前使用 SQL 语句,某些 sql 命令只是在 Qlik 中重新识别,例如:

    表名: 加载 *; SQL ;

    
    
        TableName:
        LOAD *;
        SQL
        WITH ventes AS (
             SELECT Reservations.re_numero AS IDSession
                  , InscriptionsLignes.il_montantLigneHT AS VenteSession
                  , Reservations.re_nom AS NomSession
                  , Tiers.ti_nom AS NomClient
                  , CASE 
                      WHEN Tiers_2.ti_nom + ' ' + Tiers_2.ti_prenom IS NULL 
                      THEN 'Non affecté' 
                      ELSE Tiers_2.ti_nom + ' ' + Tiers_2.ti_prenom 
                    END AS NomCommercial
              FROM Reservations 
             INNER JOIN InscriptionsEntetes 
                ON Reservations.re_numero = InscriptionsEntetes.in_reservation 
             INNER JOIN InscriptionsLignes 
                ON InscriptionsEntetes.in_numero = InscriptionsLignes.il_inscription 
             INNER JOIN InscriptionsTiers 
                ON InscriptionsEntetes.in_numero = InscriptionsTiers.it_inscription 
               AND InscriptionsLignes.il_inscription = InscriptionsTiers.it_inscription 
             INNER JOIN Tiers 
                ON InscriptionsTiers.it_tiers = Tiers.ti_identifiant 
              LEFT OUTER JOIN Tiers AS Tiers_2 
                ON InscriptionsEntetes.in_idTiersConseiller = Tiers_2.ti_identifiant
             WHERE (InscriptionsTiers.it_typeRattachement = '01') 
               AND (Reservations.re_etat  3) 
               AND (Reservations.re_annulation = 0) 
               AND (InscriptionsEntetes.in_Etat  '4'))
                  , couts AS
            (SELECT Reservations_1.re_numero AS IDSession
                  , ReservationsProduits.rp_montantPrevu AS Couts
              FROM Reservations AS Reservations_1 
             INNER JOIN ReservationsProduits 
                ON Reservations_1.re_numero = ReservationsProduits.rp_numeroReservation
             WHERE (Reservations_1.re_etat  3) 
               AND (Reservations_1.re_annulation = 0)), tot_couts AS
            (SELECT IDSession, SUM(Couts) AS couts_total
               FROM couts AS couts_1
              GROUP BY IDSession), tot_ventes AS
            (SELECT IDSession, SUM(VenteSession) AS ventes_total
               FROM ventes AS ventes_1
              GROUP BY IDSession)
            SELECT tvn.IDSession
                 , tvn.ventes_total
                 , tct.couts_total
                 , ventes_2.NomSession
                 , ventes_2.NomClient
                 , ventes_2.VenteSession
                 , ventes_2.VenteSession - tct.couts_total / (tvn.ventes_total / ventes_2.VenteSession) AS marge
              FROM tot_ventes AS tvn 
             INNER JOIN tot_couts AS tct 
                ON tvn.IDSession = tct.IDSession 
             INNER JOIN ventes AS ventes_2 
                ON tvn.IDSession = ventes_2.IDSession
             WHERE (ventes_2.VenteSession  0)
             ORDER BY tvn.IDSession;
    
    

    【讨论】:

      【解决方案2】:

      您可以将查询封装在父查询中:

      TableName:
      Load *;
      SQL
      select *
      from (
        --put your WITH query here
      ) as temp; 
      

      根据您的 RDBMS,您可能不需要这个最终别名(“as temp”)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多