2016-10-17 1 views
1

Ich versuche, um die Daten zu fusionieren, basierend auf einer Booleschen SpalteSQL-Abfrage, die Daten zu fusionieren basierend auf boolean Spalte

Originaldaten:

FName LName Status 
------------------ 
x  y  1 
x  y  0 
a  b  1 
t  t  1 
u  e  1 
t  t  1 
a  b  0 

End Ergebnis I

FName LName Yes No 
------------------- 
x  y  1 1 
a  b  1 1 
t  t  2 0 
u  e  1 0 
erreichen wollen

Dies ist, was ich versucht habe, aber es hat mich nicht bekommen, was ich wollte -

SELECT 
    [FirstName], [LastName], COUNT(*) AS No 
FROM 
    [dbo].[tablename] 
GROUP BY 
    [FirstName], [LastName], [Status] 
HAVING 
    COUNT(*) > 1 AND Status = 0 

UNION 

SELECT 
    [FirstName], [LastName], COUNT(*) AS Yes 
FROM 
    [dbo].[tablename] 
GROUP BY 
    [FirstName], [LastName], [Status] 
HAVING 
    COUNT(*) > 1 AND Status = 1 

Ich bin sicher, es muss eine einfache Möglichkeit, diese

+0

Vielen Dank marc_s – learner999

Antwort

0

erreichen Sie SUM gerade benötigen und einen CASE Ausdruck:

SELECT FName, 
     LName, 
     SUM(CASE WHEN [Status] = 1 THEN 1 ELSE 0 END) Yes, 
     SUM(CASE WHEN [Status] = 0 THEN 1 ELSE 0 END) No 
FROM YourTable 
GROUP BY FName, 
     LName; 
+0

Vielen Dank, nur eine kurze Frage, wie würde ich den Prozentsatz berechnen, wollen etwas (keine/insgesamt Anfragen) * 100 – learner999

+0

@ Lerner999 für diese, würde es helfen, welche Version von wissen SQL Server, den Sie verwenden – Lamak

+0

SQL Server 2014 – learner999

0

Mögliche Weise ist

select [FirstName],[LastName], 
    sum(0+[Status]) as Yes, 
    count([Status]) - sum(0+[Status]) as No 
from [dbo].[tablename] 
group by [FirstName],[LastName] 

0+[Status] implizit Bit konvertiert [ Status] bis Integer.

Verwandte Themen