2016-10-25 2 views
0
konvertieren

Ich habe eine temporäre Tabelle, die erstellt wird, indem 3-4 Tabellen zu verbinden. Das Ergebnis ist wie folgt.SQL Server-Pivot berechnen und Zeile in Spalte

NAME        EMP_ID  CODE Status Department 
---------------------------------------------------------------------- 
SHARIFAH SURAYA BINTI BAHARUDIN  30100359 A IN  ENG 
FATIN NADIA BINTI MOHAMMAD   30100360 B IN  ENG 
NOOR AZIAH BINTI MOHD NOOR   30100361 A Absent ENG 
NURUL ATIKA BINTI ALI ASAN   30100363 A Absent PACK 
SITI UMI KALSOM BINTI AMRAN   30100364 B Absent PACK 
ZAINATUL NABILA BINTI ZAINUDIN  30100365 A Absent PACK 
MOHD ZARUL BIN ZAUKAFLI    30100367 A IN  COM 
AIREEN SYAFIRA BINTI JAMALUDIN  30100369 A IN  COM 
FARAH WAHIDA BINTI MOHD ISA   30100371 C IN  PACK 
MUHAMAD FAIZAL BIN AZMAN   30100259 A IN  COM 
SITI NOOR HAFIZAH BINTI ZAKARANI 30100264 A IN  PACK 
NUR FATEHAH BINTI MISTAM   30100277 Z IN  PACK 

Ich würde es gerne als Pivot-Tabelle kommen, wie folgt aus:

enter image description here

Danke für die Hilfe.

+0

Können Sie die Beispieldaten im Textformat statt –

+0

Bild hinzufügen @ Prdp Thx für die Antwort .. bearbeitet – KyLim

+0

Welche Version von SQL-Server verwenden Sie –

Antwort

1

Hier ist eine Möglichkeit, mit bedingtem Aggregate

SELECT department, 
     Concat(Count(CASE WHEN code = 'a' AND status = 'IN' THEN 1 END), '/', Count(CASE WHEN code = 'a' THEN 1 END)), 
     Concat(Count(CASE WHEN code = 'b' AND status = 'IN' THEN 1 END), '/', Count(CASE WHEN code = 'b' THEN 1 END)), 
     Concat(Count(CASE WHEN code = 'c' AND status = 'IN' THEN 1 END), '/', Count(CASE WHEN code = 'c' THEN 1 END)), 
     Concat(Count(CASE WHEN code = 'z' AND status = 'IN' THEN 1 END), '/', Count(CASE WHEN code = 'z' THEN 1 END)) 
FROM yourtable 
GROUP BY department 

Wenn die Werte in Spalte Code unbekannt ist, dann dynamischen SQL verwenden

DECLARE @SQL VARCHAR(MAX)= 'SELECT department,' 

SET @SQL += (SELECT DISTINCT Concat('Count(CASE WHEN code = ''', code, ''' AND status = ''IN'' THEN 1 END)', '/', 'Count(CASE WHEN code = ''', code, ''' THEN 1 END),') 
      FROM YOURTABLE 
      FOR XML PATH('')) 
SET @SQL = LEFT(@SQL, Len(@SQL) - 1) 
SET @SQL += 'FROM yourtable 
GROUP BY department ' 

--SELECT @SQL 
EXEC(@SQL) 
+0

die Code-Spalte habe ich 10+ Arten von Code .. – KyLim

+0

@KyLim - überprüfen Sie das Update –

+0

danke master prdp – KyLim

Verwandte Themen