none
Multiplizieren in einem View RRS feed

  • Frage

  • Hallo Zusammen,

    ichhabe einen View auf zwei Tabellen mit einem inner join, jedoch müssen dort zwei spalten multipliziert werden (jeweils eine aus jeder Tabelle mit einem aus der anderen Tabelle). Wie stelle ich denn sowas an ? Kann mir da jemand ein Besipiel geben?...;-)

     

    Vielen Dank

     

    Markus

    Samstag, 2. Oktober 2010 06:42

Antworten

  • Hallo Markus,

    Yury hat es für zwei fiktive Tabellenvariablen gezeigt, die Bildung von Ausdrücken bleibt für Sichten gleich.
    Um die Lesbarkeit zu fördern, empfiehlt es sich für die verwendeten Tabellen Aliase beim FROM festzulegen.

    Mit kleiner Ergänzung (am Ende fehlt wohl was):

    SELECT   
    	ProdOrder.ID, 
    	ProdOrder.Upload_Date, 
    	ProdOrder.Plant_ID, 
    	ProdOrder.Order_Number, 
    	OrderType.Order_Description,
               
    	ProdOrder.Machine, 
    	ProdOrder.Material_Number, 
    	Material.Prod_Description, 
    	ProdOrder.Mould,
        ProdOrder.Scheduled_Date, 
    	ProdOrder.Quantity, 
    	Material.Pieces,
    
        ProdOrder.Quantity * Material.Pieces AS ProdComplete	-- durch LEFT JOOIN ist NULL möglich
    
    FROM dbo.[4311_Order_Type] AS OrderType
    INNER JOIN dbo.SAP_Prodorder AS ProdOrder 
    	ON OrderType.SAP = ProdOrder.Order_Type 
    LEFT OUTER JOIN dbo.SAP_Material AS Material
    	ON Prodorder.Material_Number = Material.Material_Nr -- Ausdruck war unvollständig (geraten)
    
    Gruß Elmar

     

    Samstag, 2. Oktober 2010 10:58
  • Hallo Markus,
    die Werte kann man direkt in der Abfrage konvertieren z.B.:
    --ProdOrder.Quantity * Material.Pieces AS ProdComplete
    cast(ProdOrder.Quantity as decimal(9,3))* cast(Material.Pieces as decimal(9,3)) AS ProdComplete

    Gruß Yury
    Samstag, 2. Oktober 2010 11:14

Alle Antworten

  • Hallo Markus,

    declare @t1 as table (id int identity(1,1),a int)
    insert into @t1 values (2)
    
    declare @t2 as table (id int identity(1,1),b int)
    insert into @t2 values (4)
    
    select t1.a, t2.b, t1.a * t2.b as c
    from @t1 t1 inner join @t2 t2
    on t1.id = t2.id
    

    Gruß Yury
    Samstag, 2. Oktober 2010 09:15
  • Hallo Yury,

    komm mit der Syntax nicht klar..:-( Also hier ist mal der view.

     

    ---------------

    SELECT     dbo.SAP_Prodorder.ID, dbo.SAP_Prodorder.Upload_Date, dbo.SAP_Prodorder.Plant_ID, dbo.SAP_Prodorder.Order_Number, dbo.[4311_Order_Type].Order_Description,
                          dbo.SAP_Prodorder.Machine, dbo.SAP_Prodorder.Material_Number, dbo.SAP_Material.Prod_Description, dbo.SAP_Prodorder.Mould,
                          dbo.SAP_Prodorder.Scheduled_Date, dbo.SAP_Prodorder.Quantity, dbo.SAP_Material.Pieces
    FROM         dbo.[4311_Order_Type] INNER JOIN
                          dbo.SAP_Prodorder ON dbo.[4311_Order_Type].SAP = dbo.SAP_Prodorder.Order_Type LEFT OUTER JOIN
                          dbo.SAP_Material ON dbo.SAP_Prodorder.Material_Number = dbo.SAP

    ------------------

    jetzt soll dbo.SAP_Prodorder.Quantity und dbo.SAP_Material.Pieces miteinander multipliziert werden und als "Prodcomplete" ausgegeben werden.

    Wie bau ich das denn ein???

     

    Gruß

    Markus

     

     

     

    Samstag, 2. Oktober 2010 10:01
  • Hallo Markus,

    Yury hat es für zwei fiktive Tabellenvariablen gezeigt, die Bildung von Ausdrücken bleibt für Sichten gleich.
    Um die Lesbarkeit zu fördern, empfiehlt es sich für die verwendeten Tabellen Aliase beim FROM festzulegen.

    Mit kleiner Ergänzung (am Ende fehlt wohl was):

    SELECT   
    	ProdOrder.ID, 
    	ProdOrder.Upload_Date, 
    	ProdOrder.Plant_ID, 
    	ProdOrder.Order_Number, 
    	OrderType.Order_Description,
               
    	ProdOrder.Machine, 
    	ProdOrder.Material_Number, 
    	Material.Prod_Description, 
    	ProdOrder.Mould,
        ProdOrder.Scheduled_Date, 
    	ProdOrder.Quantity, 
    	Material.Pieces,
    
        ProdOrder.Quantity * Material.Pieces AS ProdComplete	-- durch LEFT JOOIN ist NULL möglich
    
    FROM dbo.[4311_Order_Type] AS OrderType
    INNER JOIN dbo.SAP_Prodorder AS ProdOrder 
    	ON OrderType.SAP = ProdOrder.Order_Type 
    LEFT OUTER JOIN dbo.SAP_Material AS Material
    	ON Prodorder.Material_Number = Material.Material_Nr -- Ausdruck war unvollständig (geraten)
    
    Gruß Elmar

     

    Samstag, 2. Oktober 2010 10:58
  • ahhhhhhh Super vielen Dank.... !!!!

    Jetzt habe ich noch ein kleines Problemchen..;-)

    Und zwar liegen Pieces und Quantity als Char vor.. also klappt eine Mulitplikation nicht..

    Wie convertiere ich die zwei Daten denn im View? Auf der Tabelle selber kann ich das leider nicht machen..

     

    Gruß

     

    Markus

     

    Samstag, 2. Oktober 2010 11:10
  • Hallo Markus,
    die Werte kann man direkt in der Abfrage konvertieren z.B.:
    --ProdOrder.Quantity * Material.Pieces AS ProdComplete
    cast(ProdOrder.Quantity as decimal(9,3))* cast(Material.Pieces as decimal(9,3)) AS ProdComplete

    Gruß Yury
    Samstag, 2. Oktober 2010 11:14
  • suuuper vielen dank für Eure Hilfe funktioniert einwandfrei jetzt..;-)

     

    Gruß

     

    markus

    Samstag, 2. Oktober 2010 13:22
  • Hallo Ihr zwei,

     

    mir ist noch ein Problem aufgefallen. Und zwar kann in der zu berechnenden Zahl ein Punkt als Tausenderseperator vorkommen. Dann stimmt die Berechnung nicht, da der Punkt als Komma interpretiert wird. Wie kann ich das denn beheben?

    Gruß

     

    Markus

     

    Montag, 4. Oktober 2010 05:22
  • Hallo Markus,

    die Daten müssen bereinigt werden, weil Kommas als Trennzeichen bei der Konvertierung von varchar in decimal nicht zulässig sind. Datentypkonvertierung (Datenbankmodul).

    cast(replace(replace(ProdOrder.Quantity,'.',''),',','.') as decimal(9,3))
    *
    cast(replace(replace(Material.Pieces,'.',''),',','.') as decimal(9,3)) AS ProdComplete
    

    Gruß Yury
    Montag, 4. Oktober 2010 10:11
  • ahhhha Prima...

    wenn ich das jetzt richtig verstehe, wird in  beiden Abfragen ein existierender Punkt gelöscht und ein existierendes Komma in einem Punkt umgewandelt... ???!

    Super vielen Dank..

     

    gruß

     

    markus

    Montag, 4. Oktober 2010 10:42