2016-06-16 9 views
1

ich eine Tabelle wie folgt aus:Wie eine Ansicht von Tabellenzeile erstellen Werte

ID | staff_id | Meta_key | Meta_Value | Meta_Group 
1   1   landline  456   contact 
2   1   mobile  777   contact 
3   1   email  [email protected]   contact 
4   2   landline  453   contact 
5   2   mobile  888   contact 
6   2   email  [email protected]   contact 

ich eine Ansicht namens view_contact_details erstellen möchten, die wie folgt aussieht:

staff_id | landline | mobile | email 
    1   456   777  [email protected] 
    2   453   888  [email protected] 

Ist das möglich machen? Ich freue mich über jede Hilfe und danke Ihnen im Voraus.

+1

Mögliches Duplikat [Effizientes Zeilen in Spalten in SQL Server konvertieren] (http://stackoverflow.com/questions/15745042/efficiently-convert-rows-to-columns-in-sql-server) –

Antwort

1

Sie können dies in einem MAX umwickelt mit einem CASE tun

Beispieldaten

CREATE TABLE #TestData (ID int, staff_id int, meta_key varchar(10), meta_value varchar(10), meta_group varchar(10)) 
INSERT INTO #TestData (ID, staff_id, meta_key, meta_value, meta_group) 
VALUES 
(1,1,'landline','456','contact') 
,(2,1,'mobile','777','contact') 
,(3,1,'email','[email protected]','contact') 
,(4,2,'landline','453','contact') 
,(5,2,'mobile','888','contact') 
,(6,2,'email','[email protected]','contact') 

Abfrage;

CREATE VIEW view_contact_details 
AS 
SELECT 
Staff_ID 
,MAX(CASE WHEN Meta_Key = 'landline' THEN Meta_Value END) Landline 
,MAX(CASE WHEN Meta_Key = 'mobile' THEN Meta_Value END) Mobile 
,MAX(CASE WHEN Meta_Key = 'email' THEN Meta_Value END) Email 
FROM #TestData 
GROUP BY staff_id 

Ergebnisse;

Staff_ID Landline Mobile Email 
1   456   777  [email protected] 
2   453   888  [email protected] 
Verwandte Themen