SQL From Columns To Rows

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Gewoon123
  • Registratie: September 2021
  • Laatst online: 12-09-2021
De volgende tabel tabel structuur heb ik:

product_id, F010, F020, F030
11, 'Waarde-A', 'Waarde-B', 'Waarde-C'
56, 'Waarde-D', 'Waarde-E', 'Waarde-F'

Wat ik zou willen is de resultaten getransformeerd te hebben naar:

product_id, [key], [value]
11, 'F010', 'Waarde-A'
11, 'F020', 'Waarde-B'
11, 'F030', 'Waarde-C'

etc.

Wat heb ik geprobeerd:

Declare @YourTable Table ([ID] varchar(50),[Col1] varchar(50),[Col2] varchar(50))
Insert Into @YourTable Values
(1,'A','B')
,(2,'R','C')
,(3,'X','D')

Select A.[ID]
,Item = B.[Key]
,Value = B.[Value]
From @YourTable A
Cross Apply ( Select *
From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper ))
Where [Key] not in ('ID','Other','Columns','ToExclude')
) B

Alle reacties


Acties:
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je kan zoiets doen voor een kolom:
SQL:
1
SELECT `product_id`, 'F010' AS `key`, `F010` AS `value` FROM `Products`


Als je dan hetzelfde doet voor F020 en F030 dan kan je met een UNION de resultaten samenvoegen tot je gewenste resultaat.

(Ik begrijp echt niets van de code wat je geprobeerd hebt. Snap je die zelf wel?)

edit:
Bovenstaande query werkt op mysql. Voor mssql is de syntax net ietsjes anders:
SQL:
1
SELECT product_id, 'F010' AS [key], F010 AS [value] FROM Products


Het idee is dus: je pakt het product_id, de string 'F010' als key en de waarde uit kolom F010 als value.

[ Voor 29% gewijzigd door Daos op 12-09-2021 16:03 ]


Acties:
  • 0 Henk 'm!

  • Mortis__Rigor
  • Registratie: Oktober 2004
  • Laatst online: 07:40
Is er een reden waarom je dit in SQL wilt doen ipv in uw applicatie logica?

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Wil je de waarde niet gewoon in een soort JSON- of XML-formaat hebben en kan je dit dus niet beter in de applicatie logica stoppen ipv in de query? :?

Acties:
  • +1 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 05-07 17:35

Sebazzz

3dp

In T-SQL kan je de PIVOT functies gebruiken daarvoor.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • hoi3344
  • Registratie: November 2011
  • Laatst online: 24-06 00:41
Wat Sebazzz Zegt klopt. Pivot is wat je zoekt

Acties:
  • +1 Henk 'm!

  • hoi3344
  • Registratie: November 2011
  • Laatst online: 24-06 00:41
@Gewoon123 Om je gewoon even een kant en klaar voorbeeld te geven


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare @product table (product_id  int
                       ,F010        varchar(max)
                       ,F020        varchar(max)
                       ,F030        varchar(max)
                       )
insert into @product
values(11, 'Waarde-A', 'Waarde-B', 'Waarde-C')
     ,(56, 'Waarde-D', 'Waarde-E', 'Waarde-F')

select unpvt.product_id
      ,unpvt.[Key]
      ,unpvt.[Value]
  from @product
unpivot
(
  [Value] for [Key] in (F010, F020, F030)
) as unpvt

Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@hoi3344 je bedoelt het vast goed, maar hier zien we juist niet graag kant en klare oplossingen, want daar leert niemand veel van. We zijn meer van het motto in mijn signature ;)

[ Voor 15% gewijzigd door Woy op 17-09-2021 08:11 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • hoi3344
  • Registratie: November 2011
  • Laatst online: 24-06 00:41
Woy schreef op vrijdag 17 september 2021 @ 07:40:
@hoi3344 je bedoelt het vast goed, maar hier zien we juist niet graag kant en klare oplossingen, want daar leert niemand veel van. We zijn meer van het motto in mijn signature ;)
begrijpelijk. maar ik ben ook van mening dat je SQL goed kunt leren door een kant en klaar voorbeeld te zien. Zelf uitvogelen is niet altijd even makkelijk. Zo heb ik in ieder geval ook veel geleerd :*)

[ Voor 5% gewijzigd door hoi3344 op 17-09-2021 09:39 ]

Pagina: 1