Daten weiter einschränken, ist das möglich?

Hazel4tw1

Aktiver Benutzer
Beiträge
37
Hallo zusammen,

ist ein einschränken von Daten so von der Logik her Prinzipiell möglich?
Ein Bild sagt mehr als 1000 Worte:

upload_2014-7-31_8-54-38.png


Ich versuche quasi die Anzahl des grünen Kreises und des Roten Kreises zu kriegen.

oder:

die Ergebnisse dieser beiden Abfragen in einer:

Select COUNT(Number) as Anzahlkomp,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where CSC_NOC ='1' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)

upload_2014-7-31_9-10-22.png


Select COUNT(Number) as Anzahlnoc,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where Service_Organisation_Displayname ='CSC_NOC' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)

upload_2014-7-31_9-10-46.png

Daraus habe ich das gemacht:


Select t1.Anzahlkomp,t1.Tag,COUNT(t2.Number) as Anzahlnoc
from
(
Select COUNT(Number) as Anzahlkomp,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where CSC_NOC ='1' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)
) as t1,
ServiceTickets as t2
where Service_Organisation_Displayname ='CSC_NOC' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by t1.Anzahlkomp, t1.Tag




Ich denke mir jetzt eigentlich das Anzahlkomp und Anzahlnoc gleich sind, da die zweite Where Klausel doch eigentlich beide "Counts" auf den kleinsten "Kreis" reduziert


Raus kommt aber:

upload_2014-7-31_9-13-13.png


Anzahlkomp ist richtig?!
Kann jemand erklären wo mein DenkFehler dabei ist?


und warum AnzahlNoc nur 20991 anzeigt?

EDIT:
Select t1.Anzahlkomp,t1.Tag,COUNT(t2.Number) as Anzahlnoc, DAY(t2.Solved_Date_Time)
from
(
Select COUNT(Number) as Anzahlkomp,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where CSC_NOC ='1' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)
) as t1,
ServiceTickets as t2
where Service_Organisation_Displayname ='CSC_NOC' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by t1.Anzahlkomp, t1.Tag, DAY(Solved_Date_Time)

Wenn ich das so mache ist Anzahlkomp nicht richtig

upload_2014-7-31_9-31-55.png




Danke und Gruß
 

Anhänge

  • upload_2014-7-31_8-52-19.png
    upload_2014-7-31_8-52-19.png
    15 KB · Aufrufe: 1
Zuletzt bearbeitet:
Werbung:
Hallo zusammen,

ist ein einschränken von Daten so von der Logik her Prinzipiell möglich?
Ein Bild sagt mehr als 1000 Worte:



Ich versuche quasi die Anzahl des grünen Kreises und des Roten Kreises zu kriegen.

oder:

die Ergebnisse dieser beiden Abfragen in einer:

Select COUNT(Number) as Anzahlkomp,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where CSC_NOC ='1' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)



Select COUNT(Number) as Anzahlnoc,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where Service_Organisation_Displayname ='CSC_NOC' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)

Daraus habe ich das gemacht:


Select t1.Anzahlkomp,t1.Tag,COUNT(t2.Number) as Anzahlnoc
from
(
Select COUNT(Number) as Anzahlkomp,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where CSC_NOC ='1' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)
) as t1,
ServiceTickets as t2
where Service_Organisation_Displayname ='CSC_NOC'
group by t1.Anzahlkomp, t1.Tag



Ich denke mir jetzt eigentlich das Anzahlkomp und Anzahlnoc gleich sind, da die zweite Where Klausel doch eigentlich beide "Counts" auf den kleinsten "Kreis" reduziert

Du machst einen implizieten CROSS JOIN, suchst aber ein UNION ALL stattdessen. Im äußeren SELECT suchst Du eine Aggregation, hier sum*( ), in Verbindung mit einer Gruppierung.

Ansonsten bist aber sehr nah dran ...
 
Select t1.Anzahlkomp,t1.Tag,COUNT(t2.Number) as Anzahlnoc, DAY(t2.Solved_Date_Time)
from
(
Select COUNT(Number) as Anzahlkomp,DAY(Solved_Date_Time) as Tag
from dbo.ServiceTickets
where CSC_NOC ='1' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_Time)
) as t1,
ServiceTickets as t2
where Service_Organisation_Displayname ='CSC_NOC' and MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by t1.Anzahlkomp, t1.Tag, DAY(Solved_Date_Time)


upload_2014-7-31_9-31-55-png.367


Falls du das meinst mit der Summe und Gruppierung.


Und was meinst du mit Cross Join und Union All? Wo join ich denn etwas?
 
Ohne jetzt alles gelesen zu haben du könntest auch noch mit einer CASE Schleife in der count() Funktion arbeiten.
 
Da ich mit meiner Abfrage nicht weiter komme, habe ich es mal mit der Case Funktion versucht:

mit einer kommen noch halb richtige ergebnisse:

select DAY(Solved_Date_Time), case when CSC_NOC = '1' then COUNT(Number) end
from ServiceTickets
where MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by CSC_NOC, DAY(Solved_Date_Time)
order by DAY(Solved_Date_Time)

upload_2014-7-31_12-34-5.png


aber bei beiden kommt nichts mehr

select DAY(Solved_Date_Time), case when CSC_NOC = '1' then COUNT(Number) when Service_Organisation_Displayname='CSC_NOC' then COUNT(Number) end
from ServiceTickets
where MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by CSC_NOC, DAY(Solved_Date_Time), Service_Organisation_Displayname
order by DAY(Solved_Date_Time)



upload_2014-7-31_12-34-31.png
 
Oder meinst du das so?
Select DAY(Solved_Date_time), COUNT(case WHEN CSC_NOC ='1' Then Number else '0' end) as gesamt, COUNT(case WHEN Service_Organisation_Displayname ='CSC_NOC' Then Number else '0' end) as gesamtnoc
from ServiceTickets
where MONTH(Solved_Date_Time) ='07' and YEAR(Solved_Date_Time) ='2014'
group by DAY(Solved_Date_time)

upload_2014-7-31_12-53-7.png
 
Letzteres meinte ich ja. Aber irgendwas scheint da noch nicht zu gehen, mach mal:
Code:
SELECT    day(Solved_Date_time),
        sum(    CASE
                WHEN    CSC_NOC = '1'
                THEN    1
                ELSE    0
                END ) AS gesamt,
        sum(    CASE
                WHEN    Service_Organisation_Displayname = 'CSC_NOC'
                THEN    1
                ELSE    0
                END ) AS gesamtnoc
FROM    ServiceTickets
WHERE    month(Solved_Date_Time) = 7
AND        year(Solved_Date_Time) = 2014
GROUP BY day(Solved_Date_time)
und wenn das noch nicht passt dann:
Code:
SELECT    t.tag,
        sum(t.gesamt) AS gesamt,
        sum(t.gesamtnoc) AS gesamtnoc
FROM    (
SELECT    day(Solved_Date_time) AS tag,
        (    CASE
            WHEN    CSC_NOC = '1'
            THEN    1
            ELSE    0
            END ) AS gesamt,
        (    CASE
            WHEN    Service_Organisation_Displayname = 'CSC_NOC'
            THEN    1
            ELSE    0
            END ) AS gesamtnoc
FROM    ServiceTickets
WHERE    month(Solved_Date_Time) = 7
AND        year(Solved_Date_Time) = 2014
) t
GROUP BY t.tag
 
Danke, beide Abfragen funktionieren.

Du hast mir neue Welten geöffnet mit der CASE Anweisung und der Summe von 1.

Danke dafür
 
Sowas hier sollte aber auch gehen:
Code:
SELECT    t1.tag,
        t1.gesamt,
        t2.gesamtdoc
FROM    (
SELECT    day(Solved_Date_time) AS tag,
        count(*) AS gesamt
FROM    ServiceTickets
WHERE    month(Solved_Date_Time) = 7
AND        year(Solved_Date_Time) = 2014
AND        CSC_NOC = '1'
GROUP BY day(Solved_Date_time)
) t1
FULL JOIN (
SELECT    day(Solved_Date_time) AS tag,
        count(*) AS gesamtnoc
FROM    ServiceTickets
WHERE    month(Solved_Date_Time) = 7
AND        year(Solved_Date_Time) = 2014
AND        Service_Organisation_Displayname = 'CSC_NOC'
GROUP BY day(Solved_Date_time)
) t2
ON        t1.tag = t2.tag
Allerdings passt deine Grafik nicht ganz zu den Auswertungen. Service_Organisation_Displayname = 'CSC_NOC' würde auch gezählt, wenn CSC_NOC ungleich '1'. Ich bin mir jetzt nicht sicher ob du das willst. Wenn nicht, kann man das ja noch einbauen.
 
Hallo,

du hast recht. Nur von der Logik der Daten her ist das so.
Also wenn CSC_NOC ungleich '0' ist kann Service_Organisation_Displayname nicht = 'CSC_NOC' sein.

Deine letzte Abfrage gibt aber leider falsche Ergebnisse aus, bzw nicht die gleichen wie meine kleine 2 Abfragen von mir, bzw deine CASE Formel. Welche alle die gleichen Ergebnisse geben.

Aber das passt so mit der CASE Anweisung und erfüllt 100% seinen Zweck und ist für mich auch nachvoll ziehbar :D
 
Werbung:
Okay es gibt halt viele Wege in diesem Fall und die unterscheiden sich im wesentlichen durch Übersichtlichkeit und vieleicht auch etwas durch Performance aber das dürfte wenig sein.
 
Zurück
Oben