2017-03-29 4 views
0
SELECT 
    [CustomerKey] AS 'Cust #', 
    CU.[CompanyName] AS 'Company Name', 
    ISS.InvoiceDate AS 'Invoice Date', 
    ISS.InvoiceTotal AS 'Invoice Total', 
    ISNULL(CU.ShopPhone,'') AS 'Company Shop', 
    ISNULL(CU.CellPhone,'') AS 'Company Cell', 
    ISNULL(CU.OfficePhone,'') AS 'Company Office', 
    ISNULL(CF.FirstName, '') AS 'FName', 
    ISNULL(CF.LastName,'') AS 'LName', 
    ISNULL(CF.WorkPhone,'') AS 'Contact Work', 
    ISNULL(CF.CellPhone,'') AS 'Contact Cell', 
    ISNULL(CF.HomePhone,'') AS 'Contact Home', 
    ISNULL(CF.EMail,'') AS 'Contact Email', 
    PSO.OutsidePartsSalespersonName 
FROM 
    [ProfitMaster].[dbo].[vwAC_SSR_Customer] CU with (nolock) 
LEFT JOIN 
    [ProfitMaster].[dbo].[vwAC_SSR_InvoiceSalesSummary] ISS with (nolock) ON CU.CustomerKey = ISS.Customer 
JOIN 
    [ProfitMaster].[dbo].[vwSV_INV_PartsSalesOrder] PSO with (nolock) ON PSO.PartsSalesOrderInvoiceID = ISS.PartsSalesOrderInvoiceID 
LEFT JOIN 
    (SELECT 
     EntityID, FirstName, LastName, WorkPhone, CellPhone, HomePhone, EMail 
    FROM 
     [ProfitMaster].[dbo].[vwGB_CON_ContactFull] with (nolock) 
    WHERE 
     EntityID IS NOT NULL 
     AND FirstName <> '' 
     AND EntityTypeID = '3' 
     AND SetDefault = '1' 
    GROUP BY 
     EntityID, FirstName, LastName, WorkPhone, CellPhone, HomePhone, EMail) AS CF ON CU.CustomerID = CF.EntityID 
WHERE 
    CU.Inactive = '0' 
    AND ISS.InvoiceType = 'Parts Order' 
    AND ISS.InvoiceDate BETWEEN '2017-02-01 00:00:00.000' AND '2017-03-31 3:59:59.000' 
    AND CU.CustomerBaseBranchID = '1' 
    AND PSO.OutsidePartsSalespersonName IN ('Dave Freeland', 'Mark Miller', 'Ryan Oaks') 
GROUP BY 
    CU.CustomerKey, CU.[CompanyName], 
    ISS.InvoiceDate, ISS.InvoiceTotal, 
    CU.ShopPhone, CU.CellPhone, CU.OfficePhone, 
    CF.FirstName, CF.LastName, CF.WorkPhone, CF.CellPhone, 
    CF.HomePhone, CF.EMail, PSO.OutsidePartsSalespersonName 
ORDER BY 
    CU.CompanyName, ISS.InvoiceDate 

Wie kann ich dies zu SUM ISS.InvoiceTotal gruppiert von CustomerKey gruppieren?SQL Server-Gruppe mit zusammen

Ich bekomme immer das "ist ungültig in der Auswahlliste, weil es weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist." Error.

Irgendwelche Ideen?

+0

CustomerKey ist vermutlich der Primärschlüssel von vwAC_SSR_Customer. Ist PartsSalesOrderInvoiceID der Primärschlüssel von vwSV_INV_PartsSalesOrder oder vwAC_SSR_InvoiceSalesSummary? Ihre Outer-Joins funktionieren übrigens nicht, weil Sie alle Outer-Joined-Datensätze in Ihrer Where-Klausel ablehnen. –

+0

Sind die folgenden Annahmen richtig? 1. Die Abfrage kann mehr als einen "ISS" Datensatz für einen "CU" Datensatz finden. 2. Die Abfrage kann mehr als einen "PSO" Datensatz für einen "ISS" Datensatz finden. 3. Die Abfrage kann mehr als einen CF-Datensatz für einen CU-Datensatz finden. –

+0

1. ja 2. nein es ist eine 1 zu 1 Beziehung 3. Ja, es kann mehr als einen CF-Datensatz pro CU-Datensatz finden. Auf die CF-Tabelle kann ich jedoch verzichten, wenn es einfacher wird. –

Antwort

0

Wenn Sie in der ISS-Tabelle SUM() sind, können Sie nicht daraus auswählen oder es zur GROUP BY hinzufügen.

SELECT 
    [CustomerKey] AS 'Cust #', 
    CU.[CompanyName] AS 'Company Name', 
    LAST(ISS.InvoiceDate) AS 'Invoice Date', 
    SUM(ISS.InvoiceTotal) AS 'Invoice Total', 
    ISNULL(CU.ShopPhone,'') AS 'Company Shop', 
    ISNULL(CU.CellPhone,'') AS 'Company Cell', 
    ISNULL(CU.OfficePhone,'') AS 'Company Office', 
    ISNULL(CF.FirstName, '') AS 'FName', 
    ISNULL(CF.LastName,'') AS 'LName', 
    ISNULL(CF.WorkPhone,'') AS 'Contact Work', 
    ISNULL(CF.CellPhone,'') AS 'Contact Cell', 
    ISNULL(CF.HomePhone,'') AS 'Contact Home', 
    ISNULL(CF.EMail,'') AS 'Contact Email', 
    PSO.OutsidePartsSalespersonName 
FROM 
    [ProfitMaster].[dbo].[vwAC_SSR_Customer] CU with (nolock) 
LEFT JOIN 
    [ProfitMaster].[dbo].[vwAC_SSR_InvoiceSalesSummary] ISS with (nolock) ON CU.CustomerKey = ISS.Customer 
JOIN 
    [ProfitMaster].[dbo].[vwSV_INV_PartsSalesOrder] PSO with (nolock) ON PSO.PartsSalesOrderInvoiceID = ISS.PartsSalesOrderInvoiceID 
LEFT JOIN 
    (SELECT 
     EntityID, FirstName, LastName, WorkPhone, CellPhone, HomePhone, EMail 
    FROM 
     [ProfitMaster].[dbo].[vwGB_CON_ContactFull] with (nolock) 
    WHERE 
     EntityID IS NOT NULL 
     AND FirstName <> '' 
     AND EntityTypeID = '3' 
     AND SetDefault = '1' 
    GROUP BY 
     EntityID, FirstName, LastName, WorkPhone, CellPhone, HomePhone, EMail) AS CF ON CU.CustomerID = CF.EntityID 
WHERE 
    CU.Inactive = '0' 
    AND ISS.InvoiceType = 'Parts Order' 
    AND ISS.InvoiceDate BETWEEN '2017-02-01 00:00:00.000' AND '2017-03-31 3:59:59.000' 
    AND CU.CustomerBaseBranchID = '1' 
    AND PSO.OutsidePartsSalespersonName IN ('Dave Freeland', 'Mark Miller', 'Ryan Oaks') 
GROUP BY 
    CU.CustomerKey, CU.[CompanyName], 
    CU.ShopPhone, CU.CellPhone, CU.OfficePhone, 
    CF.FirstName, CF.LastName, CF.WorkPhone, CF.CellPhone, 
    CF.HomePhone, CF.EMail, PSO.OutsidePartsSalespersonName 
ORDER BY 
    CU.CompanyName 
+0

Das funktioniert. Vielen Dank! –