Hej arne v Jeg har en database som er fastlagt fra producenten. Jeg har en masse måle data fra forskellige PC'er. Dette måle data er vedhæftet diverse kommentarer som ligger i en tabel. Min første forespørgsel henter rådata og et kommentar-ID. Udfra kommentar-ID skal jeg hente en specifik kommentar til de fundne rådata/kommentar-ID. Går udfra at jeg kan anvende Subselect.
Hvis jeg forstår dit spørgsmål rigtigt, så ønsker du at bruge en midlertidig forespørgsel, hvis resultatsæt du vil arbejde videre med. Det kan gøres rimeligt enkelt på formlen:
SELECT felter FROM (din første forespørgsel) AS et navn WHERE osv.
Eksempel:
Du har en forespørgsel 1:
SELECT felt1, sum(felt2) as sum2, avg(felt3) as avg3 FROM dinTabel WHERE felt4 = 123 GROUP BY felt1
Data fra denne forespørgsel vil du arbejde videre med:
SELECT felt1, sum2, avg3, count(*) as antal FROM (SELECT felt1, sum(felt2) as sum2, avg(felt3) as avg3 FROM dinTabel WHERE felt4 = 123 GROUP BY felt1) as t1 HAVING count(*) > 1 ORDER BY sum2
Det virker fint, eneste begrænsning er, at data i temp forespørgslen ikke kan bruge en ORDER BY.
Og, som det efterhånden er sædvane, glemmer jeg noget. Den pokkers mus klikker altid på send for tidligt! :-)
Selv om den viste SQL bare er for at vise princippet, skal den naturligvis i princippet kunne køre - og det kan den ikke uden en ydre GROUP BY, så derfor denne korektion:
SELECT felt1, sum2, avg3, count(*) as antal FROM (SELECT felt1, sum(felt2) as sum2, avg(felt3) as avg3 FROM dinTabel WHERE felt4 = 123 GROUP BY felt1) as t1 GROUP BY felt1 HAVING count(*) > 1 ORDER BY sum2
Mit måle data er vedhæftet Tracedata såsom Lotnummer og dato alt trace data ligger i en tabel kaldt Trace i CategoryValue. Så først finder jeg min rådata ud fra lotnummer,station,part,char. Når dette er funden skal jeg have vedhæftet en dato til rådata som ligger i tabellen Trace.
Min forespørgsel1 Henter rådata: SELECT DISTINCT PartData.PartName, CharData.CharacteristicName AS GroupBy, PrintOrder, SubgroupData.SubgroupID, SubgroupDateTime, SampleData.SubgroupIx, SampleData.Excluded, SampleData.Sample, CharData.DataType, CharData.DefaultChart, CharData.SubgroupSize, CharData.PartCharID, CharData.DecimalPlaces, CharData.Target, CharData.Usl, CharData.Lsl, CharData.Uwl, CharData.Lwl, CharData.Url, CharData.Lrl, CharData.CapabilityType, CharData.LimitMethod, CharData.DistributionType, CharData.ScaleValueOnInput, SubgroupData.AlarmChar, Trace0.TraceID, Trace0.CategoryValue AS [Lotnr], Events.EventID, Events.CategoryName As EventName, Events.CategoryValue As EventValue, SampleData.SampleSize, SampleData.TotalDefects, Defects.DefectID, Defects.DefectCategory, Defects.DefectName, Defects.DefectCount, LimitData.LimitsID, LimitData.LCLX, LimitData.CLX, LimitData.UCLX, LimitData.LCLR, LimitData.CLR, LimitData.UCLR, LimitData.LCLS, LimitData.CLS, LimitData.UCLS, LimitData.LCLE, LimitData.UCLE, Stations.StationID, Stations.StationName FROM Trace as Trace0 INNER JOIN (Events RIGHT JOIN ( Defects RIGHT JOIN ((PartData INNER JOIN ((((SubgroupData INNER JOIN CharData ON SubgroupData.PartCharID = CharData.PartCharID) INNER JOIN SampleData ON SubgroupData.SubgroupID = SampleData.SubgroupID) INNER JOIN LimitData ON SubgroupData.LimitsID = LimitData.LimitsID) INNER JOIN Stations ON SubgroupData.StationID = Stations.StationID) ON PartData.PartID = CharData.PartID) ) ON SampleData.DefectID = Defects.DefectID ) ON Events.EventID = SampleData.EventID ) ON Trace0.TraceID = SampleData.TraceID WHERE PartData.TemplatePart = 0 AND PartData.IsObsolete = 0 AND (Trace0.CategoryName = 'Lotnr') AND (Trace0.CategoryValue = {CategoryValue?}) AND (Stations.StationName = {StationName?}) AND ( (PartName = {PartName?} AND CharData.CharacteristicName = {CharacteristicName?})) ORDER BY PartName, PrintOrder, CharData.PartCharID, SubgroupData.SubgroupID, SubgroupIx, Defects.DefectCategory, Defects.DefectName;
Jeg har ikke selv stykket forespørsel 1 sammen men den retuner det rigtige rådata samt TraceID.
Forsøg på forespørgsel:
Jeg har fjernet ORDER by i denne forespørgsel samt lavet en sub select. Det virker ikke men går ud fra det er noget i den retning. Jeg vil jo gerne have retuneret rådata samt Tracedata.
SELECT Trace.CategoryValue FROM Trace WHERE Trace.TraceID = (SELECT DISTINCT PartData.PartName, CharData.CharacteristicName AS GroupBy, PrintOrder, SubgroupData.SubgroupID, SubgroupDateTime, SampleData.SubgroupIx, SampleData.Excluded, SampleData.Sample, CharData.DataType, CharData.DefaultChart, CharData.SubgroupSize, CharData.PartCharID, CharData.DecimalPlaces, CharData.Target, CharData.Usl, CharData.Lsl, CharData.Uwl, CharData.Lwl, CharData.Url, CharData.Lrl, CharData.CapabilityType, CharData.LimitMethod, CharData.DistributionType, CharData.ScaleValueOnInput, SubgroupData.AlarmChar, Trace0.TraceID, Trace0.CategoryValue AS [Lotnr], Events.EventID, Events.CategoryName As EventName, Events.CategoryValue As EventValue, SampleData.SampleSize, SampleData.TotalDefects, Defects.DefectID, Defects.DefectCategory, Defects.DefectName, Defects.DefectCount, LimitData.LimitsID, LimitData.LCLX, LimitData.CLX, LimitData.UCLX, LimitData.LCLR, LimitData.CLR, LimitData.UCLR, LimitData.LCLS, LimitData.CLS, LimitData.UCLS, LimitData.LCLE, LimitData.UCLE, Stations.StationID, Stations.StationName FROM Trace as Trace0 INNER JOIN (Events RIGHT JOIN ( Defects RIGHT JOIN ((PartData INNER JOIN ((((SubgroupData INNER JOIN CharData ON SubgroupData.PartCharID = CharData.PartCharID) INNER JOIN SampleData ON SubgroupData.SubgroupID = SampleData.SubgroupID) INNER JOIN LimitData ON SubgroupData.LimitsID = LimitData.LimitsID) INNER JOIN Stations ON SubgroupData.StationID = Stations.StationID) ON PartData.PartID = CharData.PartID) ) ON SampleData.DefectID = Defects.DefectID ) ON Events.EventID = SampleData.EventID ) ON Trace0.TraceID = SampleData.TraceID WHERE PartData.TemplatePart = 0 AND PartData.IsObsolete = 0 AND (Trace0.CategoryName = 'Lotnr') AND (Trace0.CategoryValue = {CategoryValue?}) AND (Stations.StationName = {StationName?}) AND ( (PartName = {PartName?} AND CharData.CharacteristicName = {CharacteristicName?})) ) Håber det er til at fatte.
Du burde kunne føje din tabel Trace på den oprindelige SQL, men for at sige det som det er, så mistede jeg hurtigt overblikket over den (der er mange tabeller, som knyttes sammen med både INNER JOINs, RIGHT OUTER JOINs. Så hvor skal den hæftes på.
Selv om det måske ikke er god latin, vil jeg alligevel foreslå, at du forsøger dig med:
SELECT Trace.CategoryValue, T1.* FROM (SELECT DISTINCT PartData.PartName, CharData.CharacteristicName AS GroupBy, PrintOrder, SubgroupData.SubgroupID, SubgroupDateTime, SampleData.SubgroupIx, SampleData.Excluded, SampleData.Sample, CharData.DataType, CharData.DefaultChart, CharData.SubgroupSize, CharData.PartCharID, CharData.DecimalPlaces, CharData.Target, CharData.Usl, CharData.Lsl, CharData.Uwl, CharData.Lwl, CharData.Url, CharData.Lrl, CharData.CapabilityType, CharData.LimitMethod, CharData.DistributionType, CharData.ScaleValueOnInput, SubgroupData.AlarmChar, Trace0.TraceID, Trace0.CategoryValue AS [Lotnr], Events.EventID, Events.CategoryName As EventName, Events.CategoryValue As EventValue, SampleData.SampleSize, SampleData.TotalDefects, Defects.DefectID, Defects.DefectCategory, Defects.DefectName, Defects.DefectCount, LimitData.LimitsID, LimitData.LCLX, LimitData.CLX, LimitData.UCLX, LimitData.LCLR, LimitData.CLR, LimitData.UCLR, LimitData.LCLS, LimitData.CLS, LimitData.UCLS, LimitData.LCLE, LimitData.UCLE, Stations.StationID, Stations.StationName FROM Trace as Trace0 INNER JOIN (Events RIGHT JOIN ( Defects RIGHT JOIN ((PartData INNER JOIN ((((SubgroupData INNER JOIN CharData ON SubgroupData.PartCharID = CharData.PartCharID) INNER JOIN SampleData ON SubgroupData.SubgroupID = SampleData.SubgroupID) INNER JOIN LimitData ON SubgroupData.LimitsID = LimitData.LimitsID) INNER JOIN Stations ON SubgroupData.StationID = Stations.StationID) ON PartData.PartID = CharData.PartID) ) ON SampleData.DefectID = Defects.DefectID ) ON Events.EventID = SampleData.EventID ) ON Trace0.TraceID = SampleData.TraceID WHERE PartData.TemplatePart = 0 AND PartData.IsObsolete = 0 AND (Trace0.CategoryName = 'Lotnr') AND (Trace0.CategoryValue = {CategoryValue?}) AND (Stations.StationName = {StationName?}) AND ( (PartName = {PartName?} AND CharData.CharacteristicName = {CharacteristicName?})) ORDER BY PartName, PrintOrder, CharData.PartCharID, SubgroupData.SubgroupID, SubgroupIx, Defects.DefectCategory, Defects.DefectName) as t1 LEFT JOIN Trace on t1.TraceID = Trace.id;
Hej kjulius :-) ja jeg har også lidt svært ved at følge med. Men tak for dit forsøg. Jeg prøver mig lidt frem. Kan du sende et svar så jeg kan sende dig lidt point's.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.