2016-04-06 11 views
0

Ich habe folgende Probleme.SQL-Spalte Spalte unter verschiedenen Bedingungen

sieht My SQL-Tabelle folgt:

| lead_id | user | status | 
| 1  | 2002 | ZP  | 
| 2  | 2003 | ZP  | 
| 3  | 2002 | NP  | 
| 4  | 2003 | NP  | 

Ich möchte meine Ausgabe wie folgt haben:

| user | countZP | countNP | 
| 2002 | 1 | 1 | 
| 2003 | 1 | 1 | 

Ist es möglich, das zu tun?

habe ich versucht, so etwas wie dieses:

select user, count(a.status) as countZP, count(b.status) as countNP 
from mytable a 
join mytable b on a.lead_id = b.lead_id 
where a.status = "ZP" or b.status = "NP" 
group by user 

Kann mir jemand bitte helfen?

+1

Welche dbms verwenden Sie? '" ZP "' bedeutet Spalte ZP in den meisten Fällen, aber vielleicht nicht hier ...? – jarlh

Antwort

1

Verwenden Sie SUM und CASE statt COUNT.

SELECT `user`, 
SUM(CASE WHEN `status` = 'ZP' THEN 1 ELSE 0 END) AS countZP, 
SUM(CASE WHEN `status` = 'NP' THEN 1 ELSE 0 END) AS countNP 
FROM mytable 
GROUP BY `user` 

Mit Ihrer WHERE Klausel.

SELECT `user`, 
SUM(CASE WHEN `status` = 'ZP' THEN 1 ELSE 0 END) AS countZP, 
SUM(CASE WHEN `status` = 'NP' THEN 1 ELSE 0 END) AS countNP 
FROM mytable 
WHERE `status` IN ('ZP', 'NP') 
GROUP BY `user` 

Ausgabe

user countZP countNP 
2002 1  1 
2003 1  1 

SQL Fiddle: http://sqlfiddle.com/#!9/ea161/3/0

+0

wow vielen Dank und was, wenn ich Benutzer-ID ändern möchte, wenn in anderen Tabelle ich Benutzer-ID habe | Name ?? –

+0

So etwas wie eine Unterabfrage mit 'Name wo Benutzer = sub.user' – Matt

0
DECLARE @Table1 TABLE 
    (lead int, users int, status varchar(2)) 
; 

INSERT INTO @Table1 
    (lead , users , status) 
VALUES 
    (1, 2002, 'ZP'), 
    (2, 2003, 'ZP'), 
    (3, 2002, 'NP'), 
    (4, 2003, 'NP') 
; 
Select users,MAX([ZP]) AS countZP,MAX([NP]) AS countNP from (
select lead , users , status ,count(status)S from @Table1 
GROUP BY lead , users , status)T 


PIVOT(MAX(S) FOR status IN ([ZP],[NP]))P 
GROUP BY USERS 
+0

@martin lassen Sie mich wissen, dass es Ihre Anforderung erfüllt – mohan111

Verwandte Themen