2016-05-12 10 views
0

Ich möchte doppelten Kundencode entfernen, aber DISTINCT-Schlüsselwort gibt mir diesen Fehler.DISTINCT-Wert von gespeicherter Prozedur

Msg 145, Ebene 15, Status 1, Prozedur GetIdleCustomerlist, Zeile 21 ORDER BY-Elemente müssen in der Auswahlliste erscheinen, wenn SELECT DISTINCT angegeben ist.

Antwort

2

Versuchen Sie, diese Version der Abfrage:

SELECT cust.cust_code as cust_code, cust.name as cust_name, 
     MAX(invoice.created_date) as Last_invoice_date    
FROM [dbo].[customer] cust LEFT JOIN 
    [dbo].[crm_invoice_header] invoice 
    on cust.cust_code = invoice.cust_code 
GROUP BY cust.cust_code, cust.name 
HAVING ((MAX (invoice.created_date) < DATEADD(MONTH, [email protected]_months, GETDATE())) OR MAX(invoice.created_date) IS NULL) 
ORDER BY CAST(cust.cust_code AS int) ASC; 

Die distinct sollte nicht notwendig sein, und Sie müssen das Datum aus dem GROUP BY entfernen.

+0

bewegen, wenn das Datum entfernen, es gibt mir den Fehler „Msg 8121 , Ebene 16, Status 1, Zeile 7 Die Spalte 'dbo.crm_invoice_header.created_date' ist in der HAVING-Klausel ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. " – Amila

+0

@Amila. . . Sie müssen nur 'MAX (invoice.created_date)' verwenden. –

2

entfernen DISTINCT und entfernen invoice.created_date in der GROUP BY Klausel:

SELECT 
    cust.cust_code AS cust_code, 
    cust.name AS cust_name, 
    MAX(invoice.created_date) AS Last_invoice_date  
FROM dbo.customer cust 
LEFT JOIN dbo.crm_invoice_header invoice 
    ON cust.cust_code = invoice.cust_code 
WHERE 
    invoice.created_date < DATEADD(MONTH, [email protected]_months, GETDATE()) 
    OR invoice.created_date IS NULL 
GROUP BY 
    cust.cust_code, cust.name 
ORDER BY 
    ORDER BY CAST(cust.cust_code AS INT) 

Sie können auch die Bedingungen in dem HAVING-WHERE

+0

Danke ... Es funktioniert gut für mich. – Amila

Verwandte Themen