sql >> Database >  >> RDS >> Oracle

Meerdere rijwaarden in een enkele rij

Je moet wat meer werk doen voordat je zo kunt draaien, want draaien neemt rijgegevens en maakt er kolomnamen van, maar geen van je rijgegevens is 1, 2, 3, 4... om als kolomnaam te gebruiken (inp_value1 <-- de 1 hier)

U kunt dit doen, wat waarschijnlijk gemakkelijker te begrijpen is:

SELECT
  Empid,
  Ele_name,
  MAX(CASE WHEN rown = 1 THEN Inp_name END) as Inp_name1,
  MAX(CASE WHEN rown = 1 THEN Inp_value END) as Inp_Value1,
  MAX(CASE WHEN rown = 2 THEN Inp_name END) as Inp_name2,
  MAX(CASE WHEN rown = 2 THEN Inp_value END) as Inp_Value2,
  MAX(CASE WHEN rown = 3 THEN Inp_name END) as Inp_name3,
  MAX(CASE WHEN rown = 3 THEN Inp_value END) as Inp_Value3,
  MAX(CASE WHEN rown = 4 THEN Inp_name END) as Inp_name4,
  MAX(CASE WHEN rown = 4 THEN Inp_value END) as Inp_Value4,
  MAX(CASE WHEN rown = 5 THEN Inp_name END) as Inp_name5,
  MAX(CASE WHEN rown = 5 THEN Inp_value END) as Inp_Value5,
  MAX(CASE WHEN rown = 6 THEN Inp_name END) as Inp_name6,
  MAX(CASE WHEN rown = 6 THEN Inp_value END) as Inp_Value6,
  EntryId,     
  Start_date,      
  End_Date
FROM
  (SELECT t2.*, ROW_NUMBER() OVER(PARTITION BY EmpId, Ele_name ORDER BY 1) as rown FROM t2) d
GROUP BY 
  Empid,
  Ele_name, 
  EntryId,     
  Start_date,      
  End_Date
  • ps; waarom zou u name3/4/5/6 specificeren in uw verwachte uitvoer als ze allemaal null zijn? Als de gegevens nooit meer dan 2 rijen per empid/ele_name-paar zullen hebben, dan kun je gewoon null as input_name3.. enzovoort
  • pps:ik heb mijn tabel t2 genoemd - bewerk je naam in de query
  • pps; Ik weet niet of de kolom "einddatum" echt een spatie in de naam heeft, ik noemde de mijne met een onderstrepingsteken

Of je kunt als volgt draaien (moeilijker te begrijpen maar compacter):

SELECT
  Empid,
  Ele_name,
  pvt.*,
  EntryId,     
  Start_date,      
  End_Date
FROM
  (SELECT t2.*, ROW_NUMBER() OVER(PARTITION BY EmpId, Ele_name ORDER BY 1) as rown
   FROM t2) d
PIVOT( 
  MAX(inp_name) as inp_name, 
  MAX(inp_value) as inp_value 
  FOR rown in (1,2,3,4,5,6) 
) pvt

maar de kolommen komen uit de pvt.* met namen als 1_inp_name, 1_inp_value .. Je moet AS gebruiken om ze te hernoemen




  1. MySQL SUM Query is extreem traag

  2. SQL - Dubbele waarde vervangen door leeg

  3. Django-code of MySQL-triggers

  4. SQL-query voor het groeperen van de resultaten op basis van volgorde