2011-08-31 16 views
7

UNPIVOT jest dostępny w MS SQL-Server 2005, ale AFAIK nie w MS Access 2010. W jaki sposób można go wdrożyć za pomocą urządzeń pokładowych? Na przykład mam tabeliJak symulować UNPIVOT w programie Access 2010?

ID | A | B | C | Key 1 | Key 2 | Key 3 
--------------------------------------- 
1 | x | y | z |  3 | 199 | 452 
2 | x | y | z | 57 | 234 | 452 

i chcą mieć stolik jak

ID | A | B | C | Key 
-------------------- 
1 | x | y | z | 3 
2 | x | y | z | 57 
1 | x | y | z | 199 
2 | x | y | z | 234 
2 | x | y | z | 452 

Key 452 jest szczególnym przypadkiem. Obecnie wykonuję rotację w OLEDB/ATL C++. Chociaż jest wystarczająco szybki, wciąż jestem ciekawy. Jaka jest najbardziej wydajna instrukcja SQL dla programu Access 2010?

Odpowiedz

8

To zapytanie ...

SELECT ID, A, B, C, [Key 1] AS key_field 
FROM tblUnpivotSource 
UNION ALL 
SELECT ID, A, B, C, [Key 2] AS key_field 
FROM tblUnpivotSource 
UNION ALL 
SELECT ID, A, B, C, [Key 3] AS key_field 
FROM tblUnpivotSource; 

... zwraca ten zestaw rekordów (przy użyciu wartości przykładową tabelę jako tblUnpivotSource) .. .

ID A B C key_field 
-- - - - --------- 
1 x y z   3 
2 x y z  57 
1 x y z  199 
2 x y z  234 
1 x y z  452 
2 x y z  452 
+0

Wygląda zarówno dobrze, jak i wyraźnie! –

1

Niestety nie ma łatwego sposobu na zrobienie tego z dostępem. Można to zrobić za pomocą UNION aby każda wartość

SELECT ID, A, B, C, [Key 1] As key 
FROM Table 
WHERE [Key 1] = 3 

UNION ALL 

SELECT ID, A, B, C, [Key 1] As key 
FROM Table 
WHERE [Key 1] = 57 

UNION ALL 

SELECT ID, A, B, C, [Key 2] As key 
FROM Table 
WHERE [Key 2] = 199 

UNION ALL 

SELECT ID, A, B, C, [Key 2] As key 
FROM Table 
WHERE [Key 2] = 234 

UNION ALL 

SELECT ID, A, B, C, [Key 3] As key 
FROM Table 
WHERE [Key 3] = 452 
+0

UNION ALL może być szybsze i bezpieczniejsze. – Fionnuala

+0

Więc nie ma ogólnego rozwiązania? Musimy użyć wyciągu zależnego od danych? –

+0

@ Naprawdę, zaktualizowałem zapytanie. Napisałem to zbyt szybko. – Taryn

0

Etap 1

Można utworzyć tabelę pomocniczą ze wszystkich kolumn nazwisk z wartościami (Możesz użyć programu Excel, które pomogą Ci w tym: skopiuj pierwszy wiersz od ciebie tabeli w Excelu> Kopiuj Wklej specjalnie> transpozycji)

Krok 2

Tworzenie w tabeli kolumny automatycznego przyrostu i indexe tej kolumnie

Krok 3

Utwórz nową kwerendę jako krzyż przyłączyć jak

SELECT ID, A, B, C 
     , AUX_TABLE.KEY_FIELD 
     , DLookUp("[" & [AUX_TABLE].[KEY_FIELD] & "]","TABLE","[ID] = " & [TABLE].[ID]) AS KEY_VALUE 
FROM TABLE, AUX_TABLE; 

Nie zapomnij o maintence twoich AUX_TABLE

Niestety mój angielski

Powiązane problemy