sql >> Database teknologi >  >> RDS >> Oracle

Værdier af flere rækker i en enkelt række

Du skal gøre noget mere arbejde, før du kan pivotere sådan, fordi pivotering tager rækkedata og gør det til kolonnenavne, men ingen af ​​dine rækkedata er 1, 2, 3, 4... at bruge som et kolonnenavn (inp_value1 <-- 1'eren her)

Du kan gøre dette, hvilket nok er lettere at forstå:

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; hvorfor angive navn3/4/5/6 i dit forventede output, hvis de er helt nul? Hvis data aldrig vil have mere end 2 rækker pr. empid/ele_name-par, kan du bare skrive null as input_name3.. og så videre
  • pps:jeg kaldte min tabel t2 - rediger dit navn i forespørgslen
  • ppps; Jeg ved ikke om kolonnen "slutdato" virkelig har et mellemrum i navnet, jeg kaldte min med en understregning

Eller du kan pivotere sådan her (sværere at forstå, men mere kompakt):

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

men kolonnerne kommer ud af pvt.* med navne som 1_inp_name, 1_inp_value .. Du skal bruge AS for at omdøbe dem




  1. PHP-dato('W') vs MySQL YEARWEEK(nu())

  2. mysql vælg med while loop

  3. Hotel reservationspriser SQL-problem

  4. Fejl ugyldig inputsyntaks for heltal for et ikke-heltal?