Dine krav er ikke helt klare, men det ser ud til, at du forsøger at oprette en ny kolonne med navnet c
med derefter en row_number()
forbundet med det -- c1, c2 c3 osv.
.
Hvis du skulle bruge følgende i din underforespørgsel:
SELECT Val1, Val2, 'C'+ cast(row_number() over(partition efter Val2 sorteret efter val1) som varchar(10)) colFROM TEMP1
Du ville få resultatet:
| VAL1 | VAL2 | COL |----------------------------| S01 | 00731 | C1 || S02 | 00731 | C2 || S03 | 00731 | C3 || S04 | 00731 | C4 || S05 | 00731 | C5 || S06 | 00731 | C6 || S07 | 00731 | C7 || S07 | 00731 | C8 || S08 | 00731 | C9 || S09 | 00731 | C10 || S04 | 00741 | C1 || S01 | 00746 | C1 || S01 | 00770 | C1 || S01 | 00771 | C1 || S02 | 00771 | C2 |
Hvilket ser ud til at være resultatet, at du så ønsker at PIVOT
. Du skal derefter anvende PIVOT
til dette ved hjælp af:
SELECT Val2, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10FROM( SELECT Val1, Val2, 'C'+ cast(row_number() over(partition efter Val2 rækkefølge efter val1) as varchar(10)) col FROM TEMP1) srcPIVOT( MAX(Val1) FOR col IN (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)) piv;
Se SQL Fiddle with Demo . Dit endelige resultat er derefter:
| VAL2 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 |------------------------------------------------ --------------------------------------------------| 00731 | S01 | S02 | S03 | S04 | S05 | S06 | S07 | S07 | S08 | S09 || 00741 | S04 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) || 00746 | S01 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) || 00770 | S01 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) || 00771 | S01 | S02 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (null) |
Bemærk:mine resultater er lidt anderledes end det, du anmoder om som det ønskede resultat, fordi jeg udfører en ORDER BY val1
som forårsager S07
værdier, der skal grupperes sammen.
Der er ingen rækkefølge af data i en database, medmindre du anmoder om en, så der er ingen garanti for, at en af S07
værdier vises som C10
. Du kan bruge følgende til at få resultatet, men der er ingen garanti at resultatet altid vil være i den rigtige rækkefølge:
SELECT Val2, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10FROM( SELECT Val1, Val2, 'C'+ cast(row_number() over(partition efter Val2 rækkefølge efter (vælg 1)) som varchar(10)) col FROM TEMP1) srcPIVOT( MAX(Val1) FOR col IN (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)) piv;
Se SQL Fiddle with Demo
. Brug order efter (vælg 1)
ændrer rækkefølgen af dataene, men det garanterer ikke, at de altid vil være i den rækkefølge. Resultatet er:
| VAL2 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 |------------------------------------------------ --------------------------------------------------| 00731 | S01 | S02 | S03 | S04 | S05 | S06 | S07 | S08 | S09 | S07 || 00741 | S04 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) || 00746 | S01 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) || 00770 | S01 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) || 00771 | S01 | S02 | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (nul) | (null) |