Announcement

Collapse
No announcement yet.

Im Select ueber Alias - Namen zugreifen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Im Select ueber Alias - Namen zugreifen

    Hallo,

    Wie kann ich im Select - Statement auf eine Spalte zugreifen die von mir selbst erzeugt wurde?

    Bsp.

    Select 5 As DD, DD + 2 As KK From <Table> ...

    Hintergrund ist das ich einen Zwischenwert berechne der ausgegeben werden soll, aber auch zu Berechnung fuer andere Felder verwendet werden soll. In Access kann ich an dieser Stelle beispielsweise einfach den Aliasnamen angeben (siehe Bsp.). Oracle jedoch bringt die Fehlermeldung: DD invalid identifier...
    Vermutlich nur ein syntaktisches Problem meinerseits?

    Danke
    Tobject

  • #2
    Select 5 As DD, DD + 2 As KK From <Table> ...
    Naja so:
    Code:
    select  5 as DD, 7 as kk from tabelle
    Hat vermutlich jetzt nicht direkt deine Frage beantwortet, aber aus dem Beispiel werd ich leider nicht so ganz schlau. Du selektierst ja nur konstante Werte.

    Poste doch mal ein etwas umfangreicheres (jnd vor allem realistisches) Beispiel.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      SELECT
      DISTINCT R.ID AS RID,
      PY.ID AS PID,
      AR.ID AS AID,
      ML.Acronym,
      R.Equation,
      R.logK,
      P.Code AS RCode,
      L.Formula,
      M.EnglishName,
      R.Mineral,
      AR.SSA,
      P2.Code AS ACode,
      SD.Density AS Rho,
      SU.SSDUnit,
      ST.Type,
      SD.pK_1,
      SD.pK_2,
      P1.Code AS PCode,
      M.MolarMass AS MM,
      (Rho * SU.ConFac /
      (CASE WHEN SU.Selector>2 THEN AR.SSA ELSE 1 END) *
      (CASE WHEN SU.Selector=4 THEN MS.Coefficient / MM ELSE 1 END) *
      (CASE WHEN SU.Selector=6 THEN MS.Coefficient * E.AtomMass/MM ELSE 1 END) /
      (CASE WHEN SU.Selector=3 THEN PY.SLR ELSE 1 END)) AS RhoConv,
      (CASE WHEN RhoConv > 0 THEN SD.pK_1 - Log(12.05 / RhoConv, 10) ELSE Null END) AS pK_n1,
      (CASE WHEN RhoConv > 0 THEN SD.pK_2 + Log(12.05 / RhoConv, 10) ELSE Null END) AS pK_n2,
      (CASE WHEN RhoConv > 0 THEN SD.logK - Log(12.05 / RhoConv, 10) ELSE Null END) AS logk_n
      FROM
      ....

      Oracle beschwert sich das es RhoConv nicht kennt...

      Comment


      • #4
        Ah ok.
        In Oracle schreibst du sowas als Subselect (ungetestet):
        Code:
        SELECT(CASE WHEN RES.RhoConv > 0 THEN RES.pK_1 - Log(12.05 / RES.RhoConv, 10) ELSE Null END) AS pK_n1,
              (CASE WHEN RES.RhoConv > 0 THEN RES.pK_2 + Log(12.05 / RES.RhoConv, 10) ELSE Null END) AS pK_n2,
              (CASE WHEN RES.RhoConv > 0 THEN RES.logK - Log(12.05 / RES.RhoConv, 10) ELSE Null END) AS logk_n
        FROM(
          SELECT
          DISTINCT R.ID AS RID,
          PY.ID AS PID,
          AR.ID AS AID,
          ML.Acronym,
          R.Equation,
          R.logK,
          P.Code AS RCode,
          L.Formula,
          M.EnglishName,
          R.Mineral,
          AR.SSA,
          P2.Code AS ACode,
          SD.Density AS Rho,
          SU.SSDUnit,
          ST.Type,
          SD.pK_1,
          SD.pK_2,
          P1.Code AS PCode,
          M.MolarMass AS MM,
          (SD.Density * SU.ConFac /
          (CASE WHEN SU.Selector>2 THEN AR.SSA ELSE 1 END) *
          (CASE WHEN SU.Selector=4 THEN MS.Coefficient / MM ELSE 1 END) *
          (CASE WHEN SU.Selector=6 THEN MS.Coefficient * E.AtomMass/MM ELSE 1 END) /
          (CASE WHEN SU.Selector=3 THEN PY.SLR ELSE 1 END)) AS RhoConv
          FROM...)res
        Du kannst in oracle einen Alias nicht weiter im SQL verwenden. Eigentlich ein bissl schwach wenn ich's mir recht überlege aber vielleicht hat ja jemand hier eine plausible Erklärung warum das so nicht geht.

        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          Mit dem subselect hat funktioniert... Ist jedoch in gewisser Weise doch umstaendlich.

          Danke.

          Comment

          Working...
          X