locked
Translating a mySql query to MsSql RRS feed

  • Question

  • Hey

    I try to convert a MySql Statement into MsSql, but I can't get it working. - Maybe there is somebody out who could help me!?

    DROP TEMPORARY TABLE IF EXISTS tmpTeile;
    CREATE TEMPORARY TABLE tmpTeile (
      PRIMARY KEY (auftragid)
    ) ENGINE = MEMORY
    SELECT
      auftragid,
      COUNT(mitarbeiterid) AS AuftragTeile
    FROM auftragmitarbeiterverkauf
    GROUP BY auftragid;
    SELECT
      a.Auftragsart AS Auftragsart,
      CONCAT(m.`NName`, ' ', m.`VName`) AS mitarbeiter,
      SUM(
      ad.`menge` * ad.`Preis` / t.`AuftragTeile`
      ) AS Auftragssumme,
      (SUM(
      ad.`menge` * ad.`Preis` / t.`AuftragTeile`)) / COUNT(a.Auftragsart) AS Durchschnittspreis,
      COUNT(a.Auftragsart) AS Verkaeufe
    FROM `Auftrag` a
      INNER JOIN tmpTeile t
        ON t.auftragid = a.ID
      INNER JOIN `auftragmitarbeiterverkauf` am
        ON am.`auftragid` = a.`ID`
      INNER JOIN `mitarbeiter` m
        ON am.`mitarbeiterid` = m.`ID`
      LEFT JOIN `auftragdetails` ad
        ON ad.`auftragid` = a.`ID`
    WHERE a.`BezDat` BETWEEN '2013-01-01' AND '2013-12-31'
    GROUP BY mitarbeiter,
             a.`Auftragsart`;
    Thx a LOT!!! - Have a nice day

    Wednesday, November 20, 2013 2:52 PM

Answers

  • Ok.  Then I'm not a MySQL expert, but I think this is right:

    if object_id('tempdb..#Teile') is not null
    begin
      drop table #Teile;
    end
    
    CREATE TABLE #Teile( auftragid int primary key, AuftragTeile int);
    
    insert into #Teile (auftragid, AuftragTeile)
    SELECT
      auftragid,
      COUNT(mitarbeiterid) AS AuftragTeile
    FROM auftragmitarbeiterverkauf
    GROUP BY auftragid;
    
    SELECT
      a.Auftragsart AS Auftragsart,
      CONCAT(m.NName, ' ', m.VName) AS mitarbeiter,
      SUM(   ad.menge * ad.Preis / t.AuftragTeile   ) AS Auftragssumme,
      (SUM(   ad.menge * ad.Preis / t.AuftragTeile)) / COUNT(a.Auftragsart) AS Durchschnittspreis,
      COUNT(a.Auftragsart) AS Verkaeufe
    FROM Auftrag a
      INNER JOIN #Teile t
        ON t.auftragid = a.ID
      INNER JOIN auftragmitarbeiterverkauf am
        ON am.auftragid = a.ID
      INNER JOIN mitarbeiter m
        ON am.mitarbeiterid = m.ID
      LEFT JOIN auftragdetails ad
        ON ad.auftragid = a.ID
    WHERE a.BezDat BETWEEN '2013-01-01' AND '2013-12-31'
    GROUP BY mitarbeiter,
             a.Auftragsart;

    David


    David http://blogs.msdn.com/b/dbrowne/

    • Marked as answer by Zero-G. _ Wednesday, November 20, 2013 6:44 PM
    Wednesday, November 20, 2013 3:35 PM

All replies

  • Did you try the SQL Server Migration Assistant for MySQL?

    David


    David http://blogs.msdn.com/b/dbrowne/

    Wednesday, November 20, 2013 2:53 PM
  • Hey

    Yes, can't compile it:

    /* 
    *   SSMA error messages:
    *   M2SS0135: Unparsed SQL [SELECT 
    *                                                                                                                 a.auftragsart As Auftragsart, 
    *                                                                                                                 CONCAT(m.`NName`, ' ', m.`VName`) AS Mitarbeiter, 
    *                                                                                                                 SUM( 
    *                                                                                                                 ad.`Menge` * ad.`Preis`] cannot be converted.
    
    CREATE TABLE dbo.tmpTeile
    (
       CONSTRAINT PK_tmpTeile_auftragid PRIMARY KEY (auftragid)
    )
    SELECT auftragmitarbeiterverkauf.auftragid, count_big(auftragmitarbeiterverkauf.mitarbeiterid) AS AuftragTeile
    FROM dbo.auftragmitarbeiterverkauf
    GROUP BY auftragmitarbeiterverkauf.auftragid
    
    */
    
    
    /* 
    *   SSMA error messages:
    *   M2SS0135: Unparsed SQL [t.`AuftragTeile` 
    *                                                                                                                 ) AS Auftragssumme, 
    *                                                                                                                 (SUM( 
    *                                                                                                                 ad.`Menge` * ad.`Preis` / t.`AuftragTeile` ))/COUNT(a.auftragsart) AS Durchschnittspreis, 
    *                                                                                                                 COUNT(a.auftragsart) AS Verkaeufe  
    *                                                                                                                             FROM 
    *                                                                                                                               `Auftrag` a 
    *                                                                                                                              INNER JOIN tmpTeile t 
    *                                                                                                                               ON t.auftragid = a.id 
    *                                                                                                                               INNER JOIN `auftragmitarbeiterverkauf` am  
    *                                                                                                                               ON am.`auftragid` = a.`id` 
    *                                                                                                                               INNER JOIN `Mitarbeiter` m 
    *                                                                                                                               ON am.`mitarbeiterid` = m.`id` 
    *                                                                                                                               LEFT JOIN `AuftragDetails` ad 
    *                                                                                                                               ON ad.`auftragid` = a.`id` 
    *                                                                                                                            WHERE a.`BezDat` BETWEEN '{0}' AND '{1}'                                                                                                                           GROUP BY Mitarbeiter, 
    *                                                                                                                               a.`Auftragsart`;] cannot be converted.
    
    
    */
    
    

    Wednesday, November 20, 2013 2:57 PM
  • Ok.  Then I'm not a MySQL expert, but I think this is right:

    if object_id('tempdb..#Teile') is not null
    begin
      drop table #Teile;
    end
    
    CREATE TABLE #Teile( auftragid int primary key, AuftragTeile int);
    
    insert into #Teile (auftragid, AuftragTeile)
    SELECT
      auftragid,
      COUNT(mitarbeiterid) AS AuftragTeile
    FROM auftragmitarbeiterverkauf
    GROUP BY auftragid;
    
    SELECT
      a.Auftragsart AS Auftragsart,
      CONCAT(m.NName, ' ', m.VName) AS mitarbeiter,
      SUM(   ad.menge * ad.Preis / t.AuftragTeile   ) AS Auftragssumme,
      (SUM(   ad.menge * ad.Preis / t.AuftragTeile)) / COUNT(a.Auftragsart) AS Durchschnittspreis,
      COUNT(a.Auftragsart) AS Verkaeufe
    FROM Auftrag a
      INNER JOIN #Teile t
        ON t.auftragid = a.ID
      INNER JOIN auftragmitarbeiterverkauf am
        ON am.auftragid = a.ID
      INNER JOIN mitarbeiter m
        ON am.mitarbeiterid = m.ID
      LEFT JOIN auftragdetails ad
        ON ad.auftragid = a.ID
    WHERE a.BezDat BETWEEN '2013-01-01' AND '2013-12-31'
    GROUP BY mitarbeiter,
             a.Auftragsart;

    David


    David http://blogs.msdn.com/b/dbrowne/

    • Marked as answer by Zero-G. _ Wednesday, November 20, 2013 6:44 PM
    Wednesday, November 20, 2013 3:35 PM
  • WOW - Thanks! - That worked perfect!
    Wednesday, November 20, 2013 6:44 PM