Benutzer mit den meisten Antworten
Multiplizieren in einem View

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
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):
Gruß ElmarSELECT 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)
- Als Antwort markiert Andrei Talmaciu Mittwoch, 6. Oktober 2010 11:52
-
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- Als Antwort markiert Andrei Talmaciu Mittwoch, 6. Oktober 2010 11:52
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 -
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
-
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):
Gruß ElmarSELECT 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)
- Als Antwort markiert Andrei Talmaciu Mittwoch, 6. Oktober 2010 11:52
-
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
-
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- Als Antwort markiert Andrei Talmaciu Mittwoch, 6. Oktober 2010 11:52
-
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
-
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