2017-01-29 3 views
-1

Suche zusammenzufassen Felder zusammenzufassen, die als varchar(50) aus der Tabelle deklariert wird, Emp_Data zwischen Start- und Enddatum und Gruppe durch Emp_ID.Wie varchar Felder der Tabelle zwischen Start- und Enddatum

Emp_Data Schema

Emp_ID as varchar(50), 
Emp_Name as varchar(50), 
Processing_Date as datetime, 
PR as varchar(50), 
Lines as varchar(50), 
Followup as varchar(50) 

Employee_Details Schema

emp_id as varchar(50), 
Emp_Name as varchar(50), 
Manager as varchar(50), 
Target as int. 

ich eine Abfrage versucht:

SELECT PS.emp_id, 
     PS.emp_Name, 
     Sum(PR_Validation), 
     Sum(Lines), 
     Sum(RC_Number), 
     Sum(Followup), 
     Sum(Manual_Order), 
     Sum(Quotes_Processed) 
FROM Emp_Data AS PS 
INNER JOIN tbl_Employee_Details AS ED 
    ON ED.manager = 'Viswanathan' 
    AND PS.processing_date BETWEEN '01/01/2017' AND '01/31/2017' 
GROUP BY PS.emp_Id 

aber ich erhalte eine Fehlermeldung

„Spalte‚Emp_Data.Emp_Name‘ist in der Auswahlliste ungültig, da er nicht in einer Aggregatfunktion oder die GROUP BY Klausel enthalten ist.

Ich bin neu in SQL Server.

+0

Warum versuchen, * summiert Felder, die als varchar (50) * deklariert ist. Es macht keinen Sinn –

+0

Beispieldaten und gewünschte Ergebnisse würden erklären, was Sie tun möchten. Vielleicht möchten Sie auch erklären, warum die Datenstruktur so schlecht entworfen ist. –

+0

Sie fügen die Tabellen auch nicht zusammen, so dass Ihre Abfrage keinen Sinn ergibt. Sie sollten wahrscheinlich jemanden bitten, Ihnen zu helfen. –

Antwort

0

Ich denke, Sie verwenden SQL Server. Wenn dies der Fall ist, ist der beste Weg, Ihre Nummern als Nummern zu speichern. Aus diesem Grund verfügt SQL über mehrere integrierte Datentypen. Sie werden für verschiedene Dinge verwendet.

Aber, wenn Sie mit Strings stecken, dann sue try_convert(). Ich weiß nicht, die tatsächlichen Typen, also werde ich nur werfen in ganzen Zahlen:

SELECT PS.emp_id, PS.emp_Name, 
     Sum(try_convert(int, PR_Validation)), 
     Sum(try_convert(int, Lines)), 
     Sumtry_convert(int, (RC_Number)), 
     Sum(try_convert(int, Followup)), 
     Sum(try_convert(int, Manual_Order)), 
     Sum(try_convert(int, Quotes_Processed)) 
FROM Emp_Data PS INNER JOIN 
    tbl_Employee_Details AS ED 
    ON ED.manager = 'Viswanathan' AND 
     PS.processing_date >= '2017-01-01' AND 
     PS.processing_date < '2018-01-01' 
GROUP BY PS.emp_Id, PS.emp_Name ; 

Für eine Diskussion darüber, warum ich die BETWEEN zu Ungleichheiten geändert, lesen Aaron Bertrandsche blog on the subject. (Beachten Sie, dass dies für andere Datenbanken als SQL Server gilt.) Ich denke auch, dass Sie immer ISO-Standard-Datumsformate verwenden sollten, entweder YYYYMMDD (das am besten in SQL Server verwendet wird) oder YYYY-MM-DD (was fast so ist gut, funktioniert in anderen Datenbanken und ist menschlicher lesbar).

Es ist auch möglich, dass Sie COUNT() statt SUM() beabsichtigen. In diesem Fall ist die Konvertierung nicht notwendig.

Verwandte Themen