2012-02-09 21 views
8

Possible Duplicate:
Combine rows in Access 2007
Access 2007 - Concatenate fields from one column in one table into a single, comma delmited value in another tableएमएस में ही पंक्ति में एकाधिक पंक्तियों श्रृंखलाबद्ध पहुँच

वर्तमान में मैं एक मेज संरचना है कि कुछ इस तरह है:

नाम --- बिल्ली --- वर्णन - - ताड़ना --- Perc --- अरे --- बीपी
बॉब ------- सी 1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- ADC2
बॉब ------- सी 1 ------- Inf -------- 7Per -------- 0.05 ------ 2 ----- बीएसी 2
बॉब ------- सी 1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- आरबीई 2
बॉब ------- सी 1 ------- इंफ -------- 7 पीर -------- 0.05 ------ 8 ----- वीबीई 2
बॉब ------- सी 1 ------- इंफ -------- 7 पीर -------- 0.05 ------ 6 ----- एईसी 2
बॉब ------- सी 1 ------- Inf -------- 7Per -------- 0.05 ------ 0 ----- पीबीसी 2
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 1 ----- एक्सबीसी 4
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 ----- एईसी 2
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 ----- पीबीसी 2
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 3 ----- ADC2
बॉब - ----- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 ----- ADC2
बॉब ---- --- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 ----- बीएसी 2
जो ------ - सी 1 ------- इंफ --------- 7 पीयर -------- 0.05 ------ 0 ----- पीबीसी 2
जो ---- ---- सी 1 ------- इंफ --------- 7 पीर -------- 0.05 ------ 0 ----- जेडटीएम 2
जो - ------ सी 1 ------- इंफ --------- 7 पीयर -------- 0.05 ------ 2 ----- QYC2
जो -------- सी 1 ------- इंफ --------- 7 पीयर -------- 0.05 ------ 0 ----- FLC2
जो -------- सी 1 ------- इंफ --------- 7Per -------- 0.05 ------ 1 ----- केएससी 2
जो -------- सी 1 ------- Inf --------- 7Per -------- 0.05 ------ 0 --- --JYC2

जो मैं करना चाहता हूं उसके पास "नाम" और प्रति "बिल्ली" प्रति पंक्ति 1 है, जो सभी "एर" (प्रति "नाम" और "बिल्ली") को जोड़ती है और केवल संयोजित होती है "बीपी" फ़ील्ड एक ही पंक्ति में। जैसे:

नाम --- बिल्ली --- वर्णन --- ताड़ना --- Perc --- अरे --- बीपी
बॉब - ------ सी 1 ------- इंफ -------- 7Per -------- 0.05 ----- 16 ----- बीएसी 2, वीबीई 2, एईसी 2
बॉब ------- सी 2 ------ कॉम ------ 8 पीर -------- 0.45 ------ 4 ------ एक्सबीसी 4, एडीसी 2
जो -------- सी 1 ------- इंफ -------- 7Per -------- 0.05 ------ 3 ------ QYC2, केएससी 2

इसी तरह के प्रश्न पूछे गए हैं लेकिन मैं इसे लागू नहीं कर सकता क्योंकि वीबीए स्क्रिप्टिंग के बारे में मेरा ज्ञान शुरुआती है। एसक्यूएल के माध्यम से यह सब करने का कोई तरीका है? यदि वीबीए स्क्रिप्टिंग एकमात्र विकल्प है (यानी एक फ़ंक्शन बनाना), तो किसी भी मदद की सराहना की जाएगी। पहले ही, आपका बहुत धन्यवाद।

प्रश्न भाग 2:
मैंने एलन ब्राउन की मार्गदर्शिका के अनुसार कार्य बनाया। मॉड्यूल को modConcatRelated के रूप में सहेजा गया है। अब, मैं इस क्वेरी (यकीन नहीं अगर यह परिणाम है कि मैं तलाश कर रहा हूँ प्राप्त करने के लिए सही एसक्यूएल है im) को चलाने के लिए कोशिश की है:।

SELECT 
    [Name], 
    [Cat], 
    [Desc], 
    [Thresh], 
    [Perc], 
    sum([Err]), 
    ConcatRelated("[BP]", "make_table_bp", "[Err] = " & [BP]) 
FROM make_table_bp 
GROUP BY 
    [Name], 
    [Cat], 
    [Desc], 
    [Thresh], 
    [Perc], 
    [Err], 
    [BP]; 

यह "त्रुटि 3061. बहुत कम मानकों कहा उम्मीद 1. " इसके अलावा यह भी कहा गया "अनिर्धारित समारोह ConcatRelated।" मैं सही SQL कथन बनाने के तरीके पर मार्गदर्शन की तलाश में हूं ताकि मैं ConcatRelated फ़ंक्शन को सही तरीके से कॉल कर सकूं और उपरोक्त चित्रित परिणाम प्राप्त कर सकूं। एक बार फिर धन्यवाद।

अगला सवाल:
तालिका एक अद्वितीय दिनांक फ़ील्ड था क्या होगा यदि तालिका में अंतिम स्तंभ के रूप में पर टैग किया। कुछ इस तरह:

नाम --- बिल्ली --- वर्णन --- ताड़ना --- Perc --- अरे --- बीपी --- दिनांक

बॉब ------- सी 1 ------- Inf -------- 7Per -------- 0.05 ------ 0- ---- एडीसी 2--12/02/2011
बॉब ------- सी 1 ------- इंफ -------- 7Per -------- 0.05- ---- -2 ----- बीएसी 2--09/05/2011
बॉब ------- सी 1 ------- इंफ -------- 7Per ------- -0.05 ------ 0 ----- आरबीई 2--11/02/2011
बॉब ------- सी 1 ------- Inf -------- 7Per -------- 0.05 ------ 8 ----- वीबीई 2--08/14/2012
बॉब ------- सी 1 ------- Inf-- ------ 7 पीर -------- 0.05 ------ 6 ----- एईसी 2--02/25/200
बॉब ------- सी 1 --- ---- इंफ -------- 7Per -------- 0.05 ------ 0 ----- पीबीसी 2--07/02/2011
बॉब ---- --- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 1 ----- एक्सबीसी 4--09/05/2011
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 ----- एईसी 2--02/02/2010
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 ----- पीबीसी 2--08/14/2012
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 3 ----- ADC2-- 05/05/2001
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ------ 0 --- --ADC2--08/02/2010
बॉब ------- सी 2 ------- कॉम ------ 8Per -------- 0.45 ----- -0 ----- बीएसी 2--06/17/2010
जो -------- सी 1 ------- Inf --------- 7Per ----- --- 0.05 ------ 0 ----- पीबीसी 2--08/14/2012
जो -------- सी 1 ------- Inf ------ --- 7 पीर -------- 0.05 ------ 0 ----- ZTM2--09/05/2011
जो -------- सी 1 ----- --Inf --------- 7Per -------- 0.05 ------ 2 ----- QYC2--05/17/2010
जो ----- --- सी 1 ------- Inf --------- 7Per -------- 0.05 ------ 0 ----- FLC2--3/19/2010
जो --- ----- सी 1 ------- Inf --------- 7Per -------- 0.05 ------ 1 ----- KSC2--09/05/2011
जो -------- सी 1 ------- Inf --------- 7Per -------- 0।05 ------ 0 ----- जेवायसी 2--08/14/2012

मान लें कि मैं कुछ कहने के लिए एक प्रश्न बनाना चाहता हूं: मुझे अभी भी इसी प्रारूप में सभी रिकॉर्ड दिखाएं:

नाम --- बिल्ली --- वर्णन --- ताड़ना --- Perc --- अरे --- बीपी
बॉब ------ -C1 ------- Inf -------- 7Per -------- 0.05 ----- 16 ----- बीएसी 2, वीबीई 2, एईसी 2
बॉब ------- सी 2 ------ कॉम ------ 8 पीर -------- 0.45 ------ 4 ------ एक्सबीसी 4, एडीसी 2
जो -------- सी 1 ------- इंफ -------- 7Per -------- 0.05 ------ 3 ----- -QYC2, KSC2

लेकिन 01/01/2009 09/31/2011

को @HansUp की एक समय अवधि के लिए आप इस के साथ मदद कर सकता है?

+0

आप इस के लिए एक VBA उपयोगकर्ता परिभाषित समारोह की जरूरत है। एलन ब्राउन ने इसका उपयोग करने के तरीके के बारे में एक विस्तृत उदाहरण के साथ एक प्रदान किया है। http://allenbrowne.com/func-concat.html – HansUp

+0

ive फ़ंक्शन को संकलित करने के चरणों का पालन करता है, लेकिन क्या आप ऊपर दिए गए चीज़ों के आधार पर अपना "चयन" कथन बनाने में मेरी सहायता कर सकते हैं? – JT2013

+0

@ हंसअप मैंने उस लिंक का उपयोग किया जिसे आप – JT2013

उत्तर

5

मैंने ग्रुप बाय के लिए एक सबक्वायरी का उपयोग किया जो प्रत्येक समूह के लिए एर के योग की गणना करता है। फिर मैंने subquery द्वारा लौटाए गए फ़ील्ड के साथ ConcatRelated फ़ंक्शन (from Allen Browne) जोड़ा।

SELECT 
    sub.[Name], 
    sub.Cat, 
    sub.[Desc], 
    sub.Thresh, 
    sub.Perc, 
    sub.SumOfErr, 
    ConcatRelated("BP", 
     "make_table_bp", 
     "[Err] > 0 AND [Name] = '" & sub.[Name] 
     & "' AND Cat = '" 
     & sub.Cat & "'", 
     "BP") 
     AS concat_BP 
FROM 
    (SELECT 
     q.[Name], 
     q.Cat, 
     q.[Desc], 
     q.Thresh, 
     q.Perc, 
     Sum(q.[Err]) AS SumOfErr 
    FROM make_table_bp AS q 
    GROUP BY 
     q.[Name], 
     q.Cat, 
     q.[Desc], 
     q.Thresh, 
     q.Perc 
    ) AS sub 
ORDER BY 
    sub.Name, 
    sub.Cat; 

क्वेरी आउटपुट इस परिणाम सेट:

Name Cat Desc Thresh Perc SumOfErr concat_BP 
Bob C1 Inf 7Per 0.05  16 AEC2, BAC2, VBE2 
Bob C2 Com 8Per 0.45  4 ADC2, XBC4 
Joe C1 Inf 7Per 0.05  3 KSC2, QYC2 

सूचना मैं नाम, वर्णन, और अं संलग्न इस क्वेरी से क्वेरी और निर्गम (make_table_bp में अपने नमूना डेटा के आधार पर) है स्क्वायर ब्रैकेट के साथ हर जगह उन्हें क्वेरी में संदर्भित किया गया था। सभी आरक्षित शब्द हैं (Problem names and reserved words in Access देखें)। यदि संभव हो तो उन क्षेत्रों के लिए अलग-अलग नाम चुनें। यदि नहीं, तो डीबी इंजन को भ्रमित करने से बचने के लिए स्क्वायर ब्रैकेट का उपयोग करें।

लेकिन यह तब तक काम नहीं करेगा जब तक कि ConcatRelated फ़ंक्शन की आपकी प्रति आपके डेटा बेस इंजन द्वारा मान्यता प्राप्त न हो जाए। मुझे समझ में नहीं आता कि यह क्यों नहीं है; मैंने फ़ंक्शन कोड को संग्रहीत करने के लिए सूचीबद्ध चरणों का पालन किया, और यह मेरे सिस्टम पर ठीक काम करता है।

संपादित करें: मैंने तालिका के मेरे संस्करण के साथ उस क्वेरी का परीक्षण किया, जिसमें [एआरआर] संख्यात्मक डेटा प्रकार के रूप में है। आपके जैसे लगता है इसके बजाय पाठ है। उस स्थिति में, मैं सुझाव दूंगा कि आप अपना नंबर भी संख्या में बदल दें। मुझे संख्यात्मक मानों को वास्तविक संख्याओं के बजाय टेक्स्ट के रूप में संग्रहीत करने का लाभ दिखाई नहीं देता है।

हालांकि यदि आप पाठ के रूप में [एआरआर] के साथ फंस गए हैं, तो आप इसके साथ निपटने के लिए क्वेरी को अनुकूलित कर सकते हैं। इस बदलें ...

"[Err] > 0 AND [Name] = '" & sub.[Name] 

यह करने के लिए ... परिवर्तन त्रुटि "मापदंड अभिव्यक्ति में डेटा प्रकार बेमेल 'रोका

"Val([Err]) > 0 AND [Name] = '" & sub.[Name] 

इसी के साथ मैंने पाठ डेटा प्रकार के रूप के साथ [अं] का परीक्षण किया। हालांकि, मैं भी इस

Sum(q.[Err]) AS SumOfErr 
इस के लिए

... बदल ...

Sum(Val(q.[Err])) AS SumOfErr 

AFAICT कि दूसरा परिवर्तन सख्ती से आवश्यक नहीं है।जब आप इसे Sum() से पूछते हैं तो डीबी इंजन संख्याओं को पाठ के रूप में स्वीकार करने के लिए तैयार लगता है। हालांकि मैं अपनी ओर से सही अनुमान लगाने के लिए डीबी इंजन पर निर्भर होने के बजाय उन्हें संख्यात्मक मूल्यों में स्पष्ट रूप से बदलना पसंद करता हूं। डीबी इंजन के पास सौदा करने के लिए पर्याप्त अन्य सामान हैं, इसलिए मैं इसे ठीक से बताने की कोशिश करता हूं जो मैं चाहता हूं।

संपादित 2: यदि आप केवल अनन्य मूल्यों को जोड़ना चाहते हैं, तो आप ConcatRelated() फ़ंक्शन को संशोधित कर सकते हैं। कोड के इस भाग का पता लगाएं ...

'Build SQL string, and get the records. 
strSql = "SELECT " & strField & " FROM " & strTable 

और इस के लिए इसे बदल ...

'Build SQL string, and get the records. 
strSql = "SELECT DISTINCT " & strField & " FROM " & strTable 
+0

जब मैं उपर्युक्त चलाता हूं तो मुझे निम्न त्रुटि मिलती है: त्रुटि 3464: मानदंड अभिव्यक्ति में डेटा प्रकार मेल नहीं खाता .... प्रत्येक फ़ील्ड में PERC फ़ील्ड के अपवाद के साथ एक टेक्स्ट डेटा प्रकार होता है, जो – JT2013

+0

है प्रतिभा! उसने जादू की तरह काम किया! मेरे पास एकमात्र अन्य प्रश्न है: क्या concat_BP कॉलम में बनाए गए केवल विचित्र रिकॉर्ड होने का कोई तरीका है? – JT2013

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद ... मुझे डेटा मिला है जिस तरह से मुझे इसकी आवश्यकता है! – JT2013

संबंधित मुद्दे