2011-08-31 34 views
7

UNPIVOT एमएस एसक्यूएल-सर्वर 2005 में उपलब्ध है, लेकिन AFAIK एमएस एक्सेस 2010 में नहीं है। इसे ऑन-बोर्ड माध्यमों के साथ कैसे कार्यान्वित किया जा सकता है? उदाहरण के लिए, मैं एक मेजएक्सेस 2010 में UNPIVOT को अनुकरण कैसे करें?

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

है और

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 

कुंजी 452 की तरह एक मेज करना चाहते हैं एक विशेष मामला है। वर्तमान में मैं ओएलईडीबी/एटीएल सी ++ में घूर्णन करता हूं। हालांकि यह काफी तेज़ है, मैं अभी भी उत्सुक हूं। यहां एक्सेस 2010 के लिए सबसे कुशल एसक्यूएल कथन क्या है?

उत्तर

8

इस क्वेरी पाने के लिए ऐसा कर सकते हैं ...

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; 

... इस recordset रिटर्न (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

दोनों अच्छे और स्पष्ट दिखता है! –

1

दुर्भाग्यवश इसका उपयोग करने के साथ ऐसा करने का कोई आसान तरीका नहीं है। आप एक UNION का उपयोग कर प्रत्येक मूल्य

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

यूनिअन सभी तेज और सुरक्षित हो सकता है मत करो। – Fionnuala

+0

तो, कोई सामान्य समाधान नहीं है? हमें डेटा-निर्भर कथन का उपयोग करना होगा? –

+0

@Remou सच है, मैंने क्वेरी अद्यतन की है। मैंने इसे बहुत जल्दी लिखा था। – Taryn

0

चरण 1

आप मूल्यों साथ सभी स्तंभों के नाम के साथ एक सहायक तालिका बना सकते हैं (आप इस के साथ मदद करने के लिए एक्सेल का उपयोग कर सकते हैं: एक्सेल में आप तालिका की पहली पंक्ति कॉपी> विशेष पेस्ट कॉपी> स्थानांतरित)

चरण 2

एक ऑटो वेतन वृद्धि स्तंभ अपनी तालिका में बना सकते हैं और इस स्तंभ

चरण 3

एक नई क्वेरी बनाएँ के रूप में पार में शामिल होने indexe जैसे

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; 

अपने AUX_TABLE

क्षमा की maintence की भूल मेरी अंग्रेजी