2009-08-27 5 views
0

Ich habe diese Abfrage, um die gesamte OrderStatus, die Werte 1 und 5 haben. Wie kann ich nur eindeutige OD.OrderStatus = 2 Summe da mehrere Datensätze in OrderDetails Tabelle mit OrderStatus als 2.Distinct Record Problem in MS SQL Server 2008 Abfrage

Bitte helfen

SELECT O.OrderDate, 
Sum(Case When OD.OrderStatus = 2 Then 1 Else 0 End) AS OrdersOffered, 
Sum(Case When OD.OrderStatus = 1 Then 1 Else 0 End) AS OrdersAccepted 
FROM Orders O,OrderDetails OD 
Where O.Order_ID=OD.Order_ID 
GROUP BY OrderDate 
+0

Bitte geben Sie einige Beispieldaten und die Ergebnisse, die Sie suchen. Bis jetzt scheinen die Beschreibungen, die Sie geben, entweder unvollständig oder widersprüchlich und wir können nicht herausfinden, was Sie wirklich versuchen. – RBarryYoung

Antwort

1

Also, Sie wollen es 1 sein, unabhängig davon, wie viele haben Sie? Vielleicht benutzen Sie SIGN?

SELECT O.OrderDate 
    ,SIGN(Sum(Case When OD.OrderStatus = 2 Then 1 Else 0 End)) AS OrdersOffered 
    ,Sum(Case When OD.OrderStatus = 1 Then 1 Else 0 End) AS OrdersAccepted 
FROM Orders O 
    JOIN OrderDetails OD ON O.Order_ID=OD.Order_ID 
GROUP BY OrderDate 
+0

Danke. Ich denke ich brauche SUM (Zeichen (Fall wenn OD.OrderStatus = 2 Dann 1 Else 0 Ende)) AS OrdersOffered Ich muss es morgen versuchen. Ich weiß nicht, ob es funktioniert – acadia

+0

Nein. Angenommen, Sie haben zehn OrderStatus = 2 Datensätze. SUM (SIGN (wird viele 1s hinzufügen, um 10 zu erhalten. Sie möchten die 10 (Sum) zurück in eine 1 umwandeln. Also ist SIGN (SUM (, nicht SUM (SIGN (. –

+0

Danke Rob. Hier ist meine Sorge. Das oben query Ich habe einen Datumsbereich in where-Klausel.Es gibt für jedes Datum in dem Bereich gibt es Bestelldatum, OrdersOffanded, Ordersaccepted.A Aber OrderID 10010 kann 10 Aufträge mit Status als 2, aber es sollte nur 1 aber für die gleichen berücksichtigen Datum Die Summe der Bestell-IDs 10010, 10011,10012,10013 sollte 3 und nicht 1 sein. Danke – acadia

0

Verwenden Sie einfach eine Unterabfrage, um mit Ihrem Ergebnis zu helfen.

SELECT 
O.OrderDate, 
Sum(Case When OD.OrderStatus = 2 Then 1 Else 0 End) AS OrdersOffered, 
Sum(Case When OD.OrderStatus = 1 Then 1 Else 0 End) AS OrdersAccepted 
FROM Orders O inner join 
    (Select distinct Order_ID,OrderStatus 
    from OrderDetails) OD on O.Order_ID=OD.Order_ID 
GROUP BY OrderDate 

sollte es tun ...